| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как заставить поток подождать выполнения остальных |
| Автор: Firion 21.6.2005, 11:08 |
| Такая задача: реализовать с помощью потоков выполнение следующих действий с матрицами A, B и C: (А^2 - 2*A*B + C^2) Я в основном модуле Unit1 генерирую матрицы А, В, С. Во втором модуле Unit2 (созданном как File->New->Other...->Thread Object) описываю 4 новых дочерних класса TThread для 4х потоков и объявляю 4 новые переменные, соответствующие этим четырём классам (t1, t2, t3, t4); 3 из них я запускаю сразу же, так как они не должны мешать работе друг друга - первый умножает матрицу А саму на себя, второй делает 2*А*В, третий возводит С в квадрат(все промежуточные результаты заносятся в глобальные переменные: P1=A^2, P2=2*A*B, P3=C^2). Эти три потока будут выполняться одновременно. Четвёртый поток должен дождаться, пока завершат работу первые три потока, и уже после этого начнёт свои действия: S1:=P1-P2; S2:=S1+P3; Но как заставить поток №4 ждать завершения остальных? P.S. Знаю о функции WaitFor, но нигде не нашёл, как именно её следует применять, и что она возвращает. И есть ли ещё какие-нибудь не слишком замысловатые способы? |
| Автор: _hunter 21.6.2005, 11:19 |
| простой -- бери 4 мьютекса и в каждом потоке устанавливай свой. жлать WaitForSingleObject |
| Автор: Poseidon 21.6.2005, 12:43 | ||||
Метод WaitFor предназначен для синхронизации и позволяет одному потоку дождаться момента, когда завершится другой поток. Если ты внутри потока FirstThread напишешь код
то это означает, что поток FirstThread останавливается до момента завершения потока SecondThread. Метод WaitFor возвращает код завершения ожидаемого потока |
| Автор: Петрович 21.6.2005, 15:50 | ||
| Рекомендую почитать http://mbo88.narod.ru/ToC.html Что же касается твоей задачи, то напиши в начале тела t4:
|
| Автор: Firion 22.6.2005, 13:00 |
| Всем огромное спасибо! Теперь всё работает!:D |
| Автор: bel_nikita 22.6.2005, 13:35 |
| вообще WinAPI: Sleep(0) переключит потоки, т.е. поставит текущий поток в очередь последним |