Подождать завершение потока
От: RMikola  
Дата: 12.08.05 03:50
Оценка:
Подскажите как с помощью WaitForSingleObject() подождать завершения потока?
Re: Подождать завершение потока
От: gbt Россия  
Дата: 12.08.05 04:02
Оценка:
Hello, RMikola, you wrote:

> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?


[code]
WaitForSingleObject(hThread, INFINITE);
// Сюда попадем только когда поток завершится.
[/ccode]

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[2]: Подождать завершение потока
От: RMikola  
Дата: 12.08.05 04:05
Оценка:
Здравствуйте, gbt, Вы писали:

gbt>Hello, RMikola, you wrote:


>> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?


gbt>[code]

gbt>WaitForSingleObject(hThread, INFINITE);
gbt>// Сюда попадем только когда поток завершится.
gbt>[/ccode]

Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...

gbt>--

gbt> Igor Polyakov — igorpol_gbt (at) mail (dot) ru

Я делал вот так — но не работает что — то....
if(WaitForSingleObject(ComPort, 15000) == WAIT_OBJECT_0)
{
//не дождались //
}//if
else
{
OnCreateConnection(devName);
EndDialog(hDev,0);
}//else if
Re[3]: Подождать завершение потока
От: RMikola  
Дата: 12.08.05 04:11
Оценка:
Здравствуйте, RMikola, Вы писали:

RM>Здравствуйте, gbt, Вы писали:


gbt>>Hello, RMikola, you wrote:


>>> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?


gbt>>[code]

gbt>>WaitForSingleObject(hThread, INFINITE);
gbt>>// Сюда попадем только когда поток завершится.
gbt>>[/ccode]

RM>Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...


gbt>>--

gbt>> Igor Polyakov — igorpol_gbt (at) mail (dot) ru

RM> Я делал вот так — но не работает что — то....

RM> if(WaitForSingleObject(ComPort, 15000) == WAIT_OBJECT_0) пардон — здесь !=WAIT_OBJECT_
RM> {
RM> //не дождались //
RM> }//if
RM> else
RM> {
RM> OnCreateConnection(devName);
RM> EndDialog(hDev,0);
RM> }//else if
Re[3]: Подождать завершение потока
От: gbt Россия  
Дата: 12.08.05 04:21
Оценка:
Hello, RMikola, you wrote:

>>> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?


gbt>>[сcode]

gbt>>WaitForSingleObject(hThread, INFINITE);
gbt>>// Сюда попадем только когда поток завершится.
gbt>>[/ccode]

> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...


А как это он может не завершиться ?
Вы что, resource leak допускаете ?

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[4]: Подождать завершение потока
От: RMikola  
Дата: 12.08.05 04:26
Оценка:
Здравствуйте, gbt, Вы писали:

gbt>Hello, RMikola, you wrote:


>>>> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?


gbt>>>[сcode]

gbt>>>WaitForSingleObject(hThread, INFINITE);
gbt>>>// Сюда попадем только когда поток завершится.
gbt>>>[/ccode]

>> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...


gbt>А как это он может не завершиться ?

gbt>Вы что, resource leak допускаете ?

не допускаю... но поток может повиснуть в следствие ошибки при его выполнении, либо при загрузке системы — слишком долго выполняться, это критично... больше 15 секунд нельзя!

gbt>--

gbt> Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Re[5]: Подождать завершение потока
От: gbt Россия  
Дата: 12.08.05 05:06
Оценка:
Hello, RMikola, you wrote:

>>> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...


gbt>>А как это он может не завершиться ?

gbt>>Вы что, resource leak допускаете ?

> не допускаю... но поток может повиснуть в следствие ошибки при

> его выполнении, либо при загрузке системы — слишком долго
> выполняться, это критично... больше 15 секунд нельзя!

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

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[6]: Подождать завершение потока
От: RMikola  
Дата: 12.08.05 06:29
Оценка:
Здравствуйте, gbt, Вы писали:

gbt>Hello, RMikola, you wrote:


>>>> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...


gbt>>>А как это он может не завершиться ?

gbt>>>Вы что, resource leak допускаете ?

>> не допускаю... но поток может повиснуть в следствие ошибки при

>> его выполнении, либо при загрузке системы — слишком долго
>> выполняться, это критично... больше 15 секунд нельзя!

gbt>Значит нужно писать соответствующие проверки внутри потока.

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

Нет, просто по истечении 15 сек поток убивается принудительно и никакой утечки...
Вопрос в другом — вот кусок кода, вродь работать должен на ура, а он не работает,
то есть после завершения потока ничего не происходит, код дальше не выполняется... Хотя поток завершается — это железно...
Вот код:
ComPort=CreateThread(NULL,NULL,ModemFunc,NULL,0,&DWthr.dwComPort);
if(WaitForSingleObject(ComPort, 15000) == WAIT_OBJECT_0)
{
OnCreateConnection(devName);
EndDialog(hDev,0);
}//if
Вот в чем тут трабл может быть, ума не приложу

gbt>--

gbt> Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Re[7]: Подождать завершение потока
От: gbt Россия  
Дата: 12.08.05 07:49
Оценка:
Hello, RMikola, you wrote:

> Нет, просто по истечении 15 сек поток убивается принудительно и никакой утечки...

Как минимум — утечка всех ресурсов и памяти, которыми владел поток,
если таковые имеются.

> Вопрос в другом — вот кусок кода, вродь работать должен на ура, а он не работает,

> то есть после завершения потока ничего не происходит, код дальше
> не выполняется... Хотя поток завершается — это железно...
> Вот код:
> ComPort=CreateThread(NULL,NULL,ModemFunc,NULL,0,&DWthr.dwComPort);
> if(WaitForSingleObject(ComPort, 15000) == WAIT_OBJECT_0)        
> {
>     OnCreateConnection(devName);
>     EndDialog(hDev,0);
> }//if

> Вот в чем тут трабл может быть, ума не приложу
Какой именно код дальше не выполняется ? OnCreateConnection ?
Попробуйте поставить breakpoint в отладчике.
В коде выше никаких ошибок нет, единственное не показано, что вы
делаете, когда поток не успел отработать.

Не ясно, что вы делаете внутри OnCreateConnection и EndDialog.

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.