Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно дождаться завершения потока? [D5, Win95/98, Win2k]


Страницы:   1 2

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.. команде.

> как это "не знаешь" ?
> тебя интересует состояние завершенности одного конкретного
> процесса ?

Да, именно одного. У меня множество объектов, но каждого есть свой поток.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо