Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

TWebApplication & TThread   Найти похожие ветки 

 
Kibitzer ©   (2002-12-09 22:53) [0]

Во время формирования странички мне необходимо запустить несколько "ниток" (TThread), дождаться их завершения, после чего продолжить формирование странички. Собственно "дождаться" и не получается. Вопрос такой: чем заменить ProcessMessages отсутствующий у TWebApplication?


 
Polevi ©   (2002-12-10 09:31) [1]

WaitForMultipleObjects


 
han_malign ©   (2002-12-10 09:48) [2]

Win SDK Help(CreateThread): When a thread terminates, the thread object attains a signaled state, satisfying any threads that were waiting on the object.

var _ths: array[0..n-1]of THandle;
begin

............
_ths[0]:=Thread1.Handle;
............
_ths[n-1]:=ThreadN.Handle;
WaitForMultipleObjects(n,PWOHandleArray(@_ths),true,INFINITE);


 
Kibitzer ©   (2002-12-10 22:42) [3]

Честно говоря про WaitForMultipleObjects я не знал, это было познавательно - в будущем пригодится :)
Но проблема немного не в том. Дело в том, что "нитки" в процессе своей работы сбрасывают результаты в общий ресурс через Synchronize (что бы не было конфликтов). Вот на Synchronize и происходит "завис" - ожидается от главного процесса эксклюзивных прав на изменение общих ресурсов, а как это сделать? В обычных программах я просто ставил ProcessMessages и даже не задумывался об этом.


 
MBo ©   (2002-12-10 23:42) [4]

Решение может зависеть от особенностей задачи. Вероятно, Synchronize здесь не лучший выход. Возможности синхронизации доступа можно обеспечить с помощью TThreadList, TMuktiReadExclusiveWriteSynchronizer, критических секций (для потоков одного процесса), мьютексов (для межпроцессной синхр.) и т.д.
Ценный источник информации - книга Рихтера.
Посмотри еще, если интересно, http://mbo88.narod.ru/ - черновой перевод Multithreading - The Delphi Way


 
Юрий Зотов ©   (2002-12-10 23:49) [5]

Synchronize в сочетании WaitForXXX в главном потоке - это, как Вы сами сказали, 100%-ное зависание. Используйте, например, TCriticalSection (одну на всех).


 
Kibitzer ©   (2002-12-11 00:08) [6]

Так и знал, что не всё так просто :-/
Спасибо всем. Буду разбираться :)



Страницы: 1 вся ветка

Текущий архив: 2002.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-74647
malkolinge
2002-12-11 16:15
2002.12.23
Interface(Сложный вопрос)


4-75052
Keplin Sergey
2002-11-10 22:06
2002.12.23
Добавить меню другой программе...


1-74800
Сергей
2002-12-11 14:18
2002.12.23
пример программного добавления папки и программ в меню Start->Pro


1-74777
Zorro
2002-12-11 11:09
2002.12.23
Win.ini - СРОЧНО!!


1-74799
oss
2002-12-11 13:22
2002.12.23
BPL (часть 3)