Здравствуйте, 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
Здравствуйте, 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
Hello, RMikola, you wrote:
>>> Подскажите как с помощью WaitForSingleObject() подождать завершения потока?
gbt>>[сcode] gbt>>WaitForSingleObject(hThread, INFINITE); gbt>>// Сюда попадем только когда поток завершится. gbt>>[/ccode]
> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...
А как это он может не завершиться ?
Вы что, resource leak допускаете ?
Здравствуйте, 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
Hello, RMikola, you wrote:
>>> Дык если он не завершится — прога повиснет в таком случае.... а этого не надо...
gbt>>А как это он может не завершиться ? gbt>>Вы что, resource leak допускаете ?
> не допускаю... но поток может повиснуть в следствие ошибки при > его выполнении, либо при загрузке системы — слишком долго > выполняться, это критично... больше 15 секунд нельзя!
Значит нужно писать соответствующие проверки внутри потока.
Представьте, что поток не будет успевать завершаться довольно часто, а
ваша программа при этом будет продолжать работать, следовательно
ресурсы все будут утекать и утекать, так скоро и система повиснет.
Здравствуйте, 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
Hello, RMikola, you wrote:
> Нет, просто по истечении 15 сек поток убивается принудительно и никакой утечки...
Как минимум — утечка всех ресурсов и памяти, которыми владел поток,
если таковые имеются.
> Вопрос в другом — вот кусок кода, вродь работать должен на ура, а он не работает, > то есть после завершения потока ничего не происходит, код дальше > не выполняется... Хотя поток завершается — это железно... > Вот код:
> Вот в чем тут трабл может быть, ума не приложу
Какой именно код дальше не выполняется ? OnCreateConnection ?
Попробуйте поставить breakpoint в отладчике.
В коде выше никаких ошибок нет, единственное не показано, что вы
делаете, когда поток не успел отработать.
Не ясно, что вы делаете внутри OnCreateConnection и EndDialog.