![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Firion |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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, но нигде не нашёл, как именно её следует применять, и что она возвращает. И есть ли ещё какие-нибудь не слишком замысловатые способы? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
простой -- бери 4 мьютекса и в каждом потоке устанавливай свой.
жлать WaitForSingleObject -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Метод WaitFor предназначен для синхронизации и позволяет одному потоку дождаться момента, когда завершится другой поток. Если ты внутри потока FirstThread напишешь код
то это означает, что поток FirstThread останавливается до момента завершения потока SecondThread. Метод WaitFor возвращает код завершения ожидаемого потока -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Рекомендую почитать очень хорошую статью о потоках
Что же касается твоей задачи, то напиши в начале тела t4:
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Firion |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 3.6.2005 Репутация: нет Всего: нет |
Всем огромное спасибо!
Теперь всё работает!:D |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
вообще WinAPI: Sleep(0) переключит потоки, т.е. поставит текущий поток в очередь последним
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |