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;

Но думаю, что это не есть правильно.

Подскажите, как надо?


Digitman   (2004-10-29 13:01:00) [21]


> если поток не завершится за это время, тогда что?


во-первых, ты пытаешься дождаться завершения процесса, а не трэда.

если тайм-аут мал, то твоя программа продолжит выполнения со строчки, следующей за ф-цией ожидания.


> если я не знаю, сколько у меня объектов в данный момент
> работает?


как это "не знаешь" ?
тебя интересует состояние завершенности одного конкретного процесса ? вот хэндл этого процесса и есть объект синхронизации, и он один в дан.случае ! если вдруг захочешь ждать сигналы более чем одного объекта синхронизации, ты должен 2-м параметром передать адрес массива хэндлов этих объектов, а 1-м параметром - число элементов этого массива.


Reindeer Moss Eater   (2004-10-29 12:43:00) [22]

Задача у меня такая. Дождаться когда поток завершиться и сразу продолжить работу.

А может не потока, а процесса?


NewDelpher   (2004-10-29 12:38:00) [23]

Задача у меня такая. Дождаться когда поток завершиться и сразупродолжить работу. Читаем справку:


DWORD MsgWaitForMultipleObjects(

   DWORD nCount, // number of handles in the object handle array  
   LPHANDLE pHandles, // pointer to the object-handle array
   BOOL fWaitAll, // wait for all or wait for one
   DWORD dwMilliseconds, // time-out interval in milliseconds
   DWORD dwWakeMask  // type of input events to wait for
  );


здесь также указывается время в милисекундах, а если поток не завершится за это время, тогда что?
LPHANDLE pHandles - массив хэндлов объектов. А если я не знаю, сколько у меня объектов в данный момент работает?


NewDelpher   (2004-10-29 12:18:00) [24]


> То есть сам справку читать ты упорно не желаешь?

У меня про MsgWaitForMultipleObjectsExв справке ничего нет (D5)


Reindeer Moss Eater   (2004-10-29 12:13:00) [25]

у него вообще не поток, а процесс отдельный


Zelius   (2004-10-29 12:12:00) [26]


> NewDelpher ©   (29.10.04 10:29)  

Смотря какая задача стоит... Например, при завершении работы, поток может послать главному окну сообщение, тогда и ждать никого не надо, а просто отреагировать на это сообщение.


VMcL   (2004-10-29 12:10:00) [27]

>> NewDelpher ©  (29.10.04 12:08) [13]

То есть сам справку читать ты упорно не желаешь?


NewDelpher   (2004-10-29 12:08:00) [28]


> MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx

А они чем отличаются?


Digitman   (2004-10-29 11:47:00) [29]


> NewDelpher ©   (29.10.04 11:36) [10]


"продвинутый" способ - в станд.справке, прямо у тебя перед носом, если героически дочитать справку по WaitForSingleObject до конца :

If a thread creates any windows, it must process messages. DDE sends messages to all windows in the system. If you have a thread that uses a wait function with no time-out interval, the system will deadlock. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than WaitForSingleObject.


Reindeer Moss Eater   (2004-10-29 11:42:00) [30]

Но думаю, что это не есть правильно.

На основании чего тебе предложат более "правильный" способ?
Я предложу MsgWaitForMulty....
В ответ услышу, что так мол и так, все это зашибись, но мне вот тут еще надо вот это, а вот этого не хотелось бы.

И так далее.


NewDelpher   (2004-10-29 11:36:00) [31]


> Reindeer Moss Eater ©   (29.10.04 11:28) [9]
> Твой код в вопросе же приведенный не обрабатывает их?

Обрабатывает, но думал, мастера предложат какой-нибудь более "продвинутый" способ.


Reindeer Moss Eater   (2004-10-29 11:28:00) [32]

Твой код в вопросе же приведенный не обрабатывает их?


NewDelpher   (2004-10-29 11:27:00) [33]


> И что?
> А она должна анекдоты рассказывать во время ожидания?
> Мне не нравится что в вопросе про это ничего не сказано.

Она должна продолжать обрабатывать сообщения.


Reindeer Moss Eater   (2004-10-29 11:26:00) [34]

И что?
А она должна анекдоты рассказывать во время ожидания?
Мне не нравится что в вопросе про это ничего не сказано.


NewDelpher   (2004-10-29 11:21:00) [35]


> Ты свой вопрос читал? Или его за тебя твоя мама написала?

И что тебе не нравится? Если не обрабатывать сообщения, то при выполнении WaitForSingleObject с "нужным значением"  программа  замирает.


Reindeer Moss Eater   (2004-10-29 11:17:00) [36]

Ты свой вопрос читал? Или его за тебя твоя мама написала?

Как правильно дождаться завершенияпотока?


NewDelpher   (2004-10-29 11:15:00) [37]


> У тебя таймаут 10 миллисекунд.
> Ты ждешь своего потока не дольше десяти миллисекунд.

А что нельзя? Надо ждать больше 10 милисекунд? И что значит нужное? Кому это оно нужно?


Reindeer Moss Eater   (2004-10-29 11:03:00) [38]

И что?
Дед пихто.

У тебя таймаут 10 миллисекунд.
Ты ждешь своего потока не дольше десяти миллисекунд.

Нажми F1 и узнай нужное значениевторого пареаметра


NewDelpher   (2004-10-29 11:00:00) [39]


> Reindeer Moss Eater ©   (29.10.04 10:52) [1]
> Нажми F1 и узнай нужное значение второго пареаметра

время ожидания в милисекундах. Если поток не завершился, значит функция вернет WAIT_TIMEOUT. И что?


Reindeer Moss Eater   (2004-10-29 10:52:00) [40]

Нажми F1 и узнай нужное значение второго пареаметра


Страницы:   1 2

Наверх

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