![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TWebApplication & TThread [D5, D6, Win2k]
Kibitzer © (2002-12-09 22:53:00)Во время формирования странички мне необходимо запустить несколько "ниток" (TThread), дождаться их завершения, после чего продолжить формирование странички. Собственно "дождаться" и не получается. Вопрос такой: чем заменить ProcessMessages отсутствующий у TWebApplication?
Kibitzer (2002-12-11 00:08:00) [1]Так и знал, что не всё так просто :-/
Спасибо всем. Буду разбираться :)
Юрий Зотов (2002-12-10 23:49:00) [2]Synchronize в сочетании WaitForXXX в главном потоке - это, как Вы сами сказали, 100%-ное зависание. Используйте, например, TCriticalSection (одну на всех).
MBo (2002-12-10 23:42:00) [3]Решение может зависеть от особенностей задачи. Вероятно, Synchronize здесь не лучший выход. Возможности синхронизации доступа можно обеспечить с помощью TThreadList, TMuktiReadExclusiveWriteSynchronizer, критических секций (для потоков одного процесса), мьютексов (для межпроцессной синхр.) и т.д.
Ценный источник информации - книга Рихтера.
Посмотри еще, если интересно, http://mbo88.narod.ru/- черновой перевод Multithreading - The Delphi Way
Kibitzer (2002-12-10 22:42:00) [4]Честно говоря про WaitForMultipleObjects я не знал, это было познавательно - в будущем пригодится :)
Но проблема немного не в том. Дело в том, что "нитки" в процессе своей работы сбрасывают результаты в общий ресурс через Synchronize (что бы не было конфликтов). Вот на Synchronize и происходит "завис" - ожидается от главного процесса эксклюзивных прав на изменение общих ресурсов, а как это сделать? В обычных программах я просто ставил ProcessMessages и даже не задумывался об этом.
han_malign (2002-12-10 09:48:00) [5]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);
Polevi (2002-12-10 09:31:00) [6]WaitForMultipleObjects