Squeak.ru - шаблоны программирования

Как создать дочерние элементы SubMonitor для одновременного/параллельного/асинхронного выполнения?

Я могу использовать методы split или newChild для создания дочернего элемента для SubMonitor[ 1]:

SubMonitor firstChild = parentMonitor.split(50);
SubMonitor secondChild = parentMonitor.split(50);

Создание второго дочернего элемента автоматически завершает создание первого дочернего элемента[2]:

У каждого SubMonitor одновременно есть только один активный дочерний элемент. Каждый раз, когда вызывается newChild(int) или split(int), результатом становится новый активный дочерний элемент, и любой неиспользованный прогресс от ранее активного дочернего элемента потребляется.

Это делает ненужным вызов done() для экземпляра SubMonitor, поскольку дочерние мониторы автоматически очищаются при следующем касании родителя.

=> Каков рекомендуемый способ создания дочерних мониторов, если я не хочу запускать один дочерний элемент за другим, а запускаю их одновременно?

Создание второго дочернего монитора немедленно приведет к неправильному общему прогрессу, поскольку первый дочерний элемент еще не завершен.

Некоторые идеи:

a) Вообще не используйте SubMonitor для этого параллельного случая, а придерживайтесь устаревшего SubProgressMontior (я еще не проверял, поможет ли это.)?

б) Как-то пропустить потребление неиспользованного прогресса? (Кажется, suppressFlags, которое можно передать методу split, не дает для этого значения.)

Похожие вопросы


  • Монитор прогресса не поддерживает параллельное выполнение. Этот ответ «параллельные задания» выглядит так, как будто он просто запускает несколько заданий (или UIJobs) и показывает прогресс в представлении «Прогресс». 16.08.2017
  • Спасибо за разъяснения. Так что, похоже, мне нужно реализовать свой собственный ConcurrentSubMonitor. 16.08.2017

Новые материалы

API следующего поколения: gRPC n Javascript
gRPC - быстро развивающаяся технология, которая потенциально может заменить протокол HTTP. Это быстрее, чем традиционные HTTP-вызовы, потому что он отправляет данные в двоичном формате, а не в..

Ускоренный курс по жадным алгоритмам
Дай мне, дай мне, дай мне Аудитория Эта статья предназначена для инженеров, достаточно хорошо разбирающихся в программировании, структурах данных и алгоритмах. Он в основном основан на..

Изучайте Java (Урок 2: Комментарии)
Как и зачем использовать комментарии в java с примерами Введение: Комментарии — это строки текста в программе Java, которые игнорируются компилятором и используются для добавления..

Async Await в Swift: легкое управление параллелизмом
Введение в запуск асинхронного кода Асинхронный код выполняет несколько операций одновременно. Параллелизм необходим при выполнении тяжелых вычислений или сетевых запросов. Однако это может..

Очистить файлы Program .cache в Ubuntu 20.10
Очистите кеш за несколько простых шагов! GNU / Linux реализовал эффективное управление хранилищем для своих пользователей. Но заметили ли вы, что в вашей системе Linux заканчивается место,..

Использование Node.js для чтения действительно больших файлов (часть 1)
В этом сообщении в блоге есть интересный источник вдохновения. На прошлой неделе кто-то на одном из моих каналов в Slack опубликовал тестовое задание, которое он получил на должность..

Введение в градиентный спуск и обратное распространение
Введение в градиентный спуск и обратное распространение Как машинное обучение? Машинное обучение ( ML ) - это исследование компьютерных алгоритмов, которые автоматически улучшаются по..