![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно дождаться завершения потока? [D5, Win95/98, Win2k]
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 и узнай нужное значение второго пареаметра