Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить поток подождать выполнения остальных 
:(
    Опции темы
Firion
Дата 21.6.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2005

Репутация: нет
Всего: нет



Такая задача:
реализовать с помощью потоков выполнение следующих действий с матрицами 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, но нигде не нашёл, как именно её следует применять, и что она возвращает. И есть ли ещё какие-нибудь не слишком замысловатые способы?
PM MAIL   Вверх
_hunter
Дата 21.6.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



простой -- бери 4 мьютекса и в каждом потоке устанавливай свой.
жлать WaitForSingleObject


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Poseidon
Дата 21.6.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Firion @ 21.6.2005, 11:08)
Знаю о функции WaitFor, но нигде не нашёл, как именно её следует применять, и что она возвращает.
function WaitFor: Integer;

Метод WaitFor предназначен для синхронизации и позволяет одному потоку дождаться момента, когда завершится другой поток. Если ты внутри потока FirstThread напишешь код
Код
Code := SecondThread.WaitFor;

то это означает, что поток FirstThread останавливается до момента завершения потока SecondThread. Метод WaitFor возвращает код завершения ожидаемого потока




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Петрович
Дата 21.6.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Рекомендую почитать очень хорошую статью о потоках
Что же касается твоей задачи, то напиши в начале тела t4:
Код

  t1.WaitFor;
  t2.WaitFor;
  t3.WaitFor;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Firion
Дата 22.6.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2005

Репутация: нет
Всего: нет



Всем огромное спасибо!
Теперь всё работает!:D
PM MAIL   Вверх
bel_nikita
Дата 22.6.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: нет
Всего: 47



вообще WinAPI: Sleep(0) переключит потоки, т.е. поставит текущий поток в очередь последним


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1306 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.