В своей старой программе я использовал потоки TThread для параллельного вычисления с помощью всех ядер процессора. Но у меня возникали проблемы с синхронизацией после каждого завершенного потока.
Узнал, что существует модуль System.Threading, в котором есть всякие TTask иTParallel. И, что меня заинтересовало, TTask.WaitForAll. Вот только не пойму как это все использовать,
В частности, мне нужен вывод на экран информации каждый раз после того, как все потоки завершат свою работу.
Например, есть 4-х ядерный процессор. Я создаю 4 потока и каждому из них подсовываю определенную процедуру для выполнения.
Мне нужно, чтобы после того, как все потоки закончили вычисления, вывелась информация на экран и они снова начали работать над своими процедурами. И так, пока я не остановлю.
Есть метод TTask.WaitForAll, который дожидается выполнения всех потоков TTask, но если после вызова этого метода вставить строку вывода на экран, а затем сразу же снова запустить потоки, то ничего не выводится, программа подвисает, но при этом загрузка процессора ни 100% как должна быть, а где-то 30%.
И для чего нужен TParallel, iFuture? Будьте добры, подскажите, кто в теме.
Вопрос
Alex7wrt
В своей старой программе я использовал потоки TThread для параллельного вычисления с помощью всех ядер процессора. Но у меня возникали проблемы с синхронизацией после каждого завершенного потока.
Узнал, что существует модуль System.Threading, в котором есть всякие TTask иTParallel. И, что меня заинтересовало, TTask.WaitForAll. Вот только не пойму как это все использовать,
В частности, мне нужен вывод на экран информации каждый раз после того, как все потоки завершат свою работу.
Например, есть 4-х ядерный процессор. Я создаю 4 потока и каждому из них подсовываю определенную процедуру для выполнения.
Мне нужно, чтобы после того, как все потоки закончили вычисления, вывелась информация на экран и они снова начали работать над своими процедурами. И так, пока я не остановлю.
Есть метод TTask.WaitForAll, который дожидается выполнения всех потоков TTask, но если после вызова этого метода вставить строку вывода на экран, а затем сразу же снова запустить потоки, то ничего не выводится, программа подвисает, но при этом загрузка процессора ни 100% как должна быть, а где-то 30%.
И для чего нужен TParallel, iFuture? Будьте добры, подскажите, кто в теме.
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.