![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно дождаться завершения потока? [D5, Win95/98, Win2k]
NewDelpher © (2004-10-29 10:29:00)Пока есть вот такая мысль:
while WaitForSingleObject(MyProcess.Handle, 10) = WAIT_TIMEOUT do Application.ProcessMessages;
Но думаю, что это не есть правильно.
Подскажите, как надо?
Reindeer Moss Eater (2004-10-29 15:51:00) [1]Ну да, причем она выполняется с определенной скоростью и эта скорость может меняться.
Тем более не надо ждать
DoWarm;
DoMore;
Digitman (2004-10-29 15:50:00) [2]
> NewDelpher © (29.10.04 15:42) [38]
тогда RMD тебе правильно говорит : "нагревающий" трэд должен сигнализировать о каждом изменеии температуры нагреваемого объекта .. все прочие трэды, заинтересованные в получении нотификаций об изменениях температуры, должны просто "ловить" эти сигналы и по факту "поимки" делать своим "черные дела"
NewDelpher (2004-10-29 15:42:00) [3]
> это что, синхронная функция ?
Ну да, причем она выполняется с определенной скоростью и эта скорость может меняться. В это время другой объект тоже "измеряет" эту температуру и тоже делает какие-то действия.
> Поток, проверяющий температуру, должен сингнализировать
> о том, что пора там чего-то открывать.
> И не надо никого ждать.
он есть, но в другом объекте.
Digitman (2004-10-29 15:37:00) [4]
> "Нагреть до температуры N"
это что, синхронная функция ?
Reindeer Moss Eater (2004-10-29 15:33:00) [5]Поток, проверяющий температуру, должен сингнализировать о том, что пора там чего-то открывать.
И не надо никого ждать.
NewDelpher (2004-10-29 15:29:00) [6]
>
> > NewDelpher © (29.10.04 15:14) [30]
>
>
> однако, странный ты товарисч !
>
> басню приснопамятного Крылова Иванандрейча про "ЛебедьРакомЩуку"
> помнишь ?
Да, стормозил. Но вопрос-то про поток был :)
> Ну и зачем при этом чего-то ждать ?
Как зачем, если в последовательности функций написано 1. "Нагреть до температуры N"
2. "Открыть клапан 2"
А если у меня температура N еще не достигнута, как я буду клапан открывать? Надо дождаться, пока до N нагреется.
Digitman (2004-10-29 15:26:00) [7]
> Прошу прощения. Я имел ввиду поток
ну и накой шут нужен такой поток ?
получается поход в гости к соседу по лестн.площадке через Китай !
ты стартовал какой-то доп.трэд и ждешь, пока он выполнит все что на него возложено, после чего продолжаешь выполнение алгоритма вызывающего трэда, пользуя окончательные выходные рез-ты работы доп.трэда.
ну и чем же это лучше однопоточной реализации алгоритма ?
Reindeer Moss Eater (2004-10-29 15:23:00) [8]А надо, чтобы у одного что-то непрерывно менялось, а другой на это реагировал. Количество объектов заранее не известно.
Ну и зачем при этом чего-то ждать ?
Digitman (2004-10-29 15:22:00) [9]
> NewDelpher © (29.10.04 15:14) [30]
однако, странный ты товарисч !
басню приснопамятного Крылова Иванандрейча про "ЛебедьРакомЩуку" помнишь ?
NewDelpher (2004-10-29 15:18:00) [10]
> "MyProcess.Handle" - ты написал ? или я ? или Пушкин ?
Прошу прощения. Я имел ввиду поток.
NewDelpher (2004-10-29 15:14:00) [11]
> А нахрен такой поток, который надо ждать функцией ожидания?
> Что изменится, если весь код его выполниться в главном потоке?
> Бред какой-то напридумывал.
изменится всё. Если всё мои объекты будут последовательно выполнять свои функции в главном потоке, то ничего не получится. Т.е. один последовательно изменил у себя значение свойства "температура", а другой получил лишь конечное значение. А надо, чтобы у одного что-то непрерывно менялось, а другой на это реагировал. Количество объектов заранее не известно.
Digitman (2004-10-29 15:09:00) [12]
> Просто я пример видел в инете
слышал звон, да не знаешь где он !
> WaitForSingleObject для потоков работать не будет?
будет !
но ты же не хендл трэдапередаешь как вх.параметр ф-ции ожидания, а хэндл процесса !!
"MyProcess.Handle" - ты написал ? или я ? или Пушкин ?
Значит таки речь о процессеидет, а не о трэде?!
Или тебе строго по поясу, что "трэд", что "процесс" ? разницы вообще не видишь между этими понятиями и механизмами ?
Reindeer Moss Eater (2004-10-29 15:06:00) [13]А нахрен такой поток, который надо ждать функцией ожидания?
Что изменится, если весь код его выполниться в главном потоке?
Бред какой-то напридумывал.
NewDelpher (2004-10-29 14:54:00) [14]
> Сигнализируй по окончании оных главному потоку и ничего
> не жди.
а что WaitForSingleObject для потоков работать не будет? Просто я пример видел в инете, там как раз её использовали.
Reindeer Moss Eater (2004-10-29 14:42:00) [15]Каждая из функций выполняются в потоке,
А какого тогда ... ты ждешь окончания процесса а не потока?
И если у тебя потоки, то зачем их ждать?
Сигнализируй по окончании оных главному потоку и ничего не жди.
NewDelpher (2004-10-29 14:38:00) [16]
>
> Ты бы лучше сформулировал подробнее свою задачу, тогда бы
> и ответили более предметно.
Есть множество объектов. У каждого объекта свои функции, выполняющиеся в заданной последовательности. Каждая из функций выполняются в потоке, который создается перед выполнением функции и уничтожается после её выполнения.
Добрый дядька (2004-10-29 14:26:00) [17]> NewDelpher ©
Ты бы лучше сформулировал подробнее свою задачу, тогда бы и ответили более предметно.
NewDelpher (2004-10-29 14:24:00) [18]
>
> Тогда зачем поток нужен? Потоки нужны тогда, когда программа
> должна продолжать работу, пока в потоке идет отдельное вычисление.
а у меня эти объекты - независимые, у каждого свои отдельные вычисления.
Zelius (2004-10-29 14:03:00) [19]
> NewDelpher © (29.10.04 13:19) [21]
Тогда зачем поток нужен? Потоки нужны тогда, когда программа должна продолжать работу, пока в потоке идет отдельное вычисление.
NewDelpher (2004-10-29 13:19:00) [20]
> если тайм-аут мал, то твоя программа продолжит выполнения
> со строчки, следующей за ф-цией ожидания.
Вот именно! А этого как раз и не надо. Надо, чтобы программа ждала, пока не завершится поток, и только потом уже переходила к следующей после Wait.. команде.
> как это "не знаешь" ?
> тебя интересует состояние завершенности одного конкретного
> процесса ?
Да, именно одного. У меня множество объектов, но каждого есть свой поток.