Машинист паровоза
Группа: Участник
Сообщений: 239
|
Функция потока наследника TThread
CODE |
void __fastcall TConsoleIOStatusThread::Execute()
{
SetName();
//ожидание завершение процесса
WaitForSingleObject( FProcessHandle, INFINITE );
DWORD TotalBytesAvail;
do
{
PeekNamedPipe( FReadHandle , NULL , 0, NULL , &TotalBytesAvail, NULL );
Sleep(250);
}while(TotalBytesAvail);
// закрытие канала
CloseHandle (FWriteHandle);
CloseHandle (FReadHandle);
}
|
Проблема в том что если в цикл вставить Sleep, или вообще в любое место после вызова PeekNamedPipe то следующий вызов этой функции намертво блокируется системой. Объясните корреляцию.. на ноуте все работает без проблем. На настольной машине только если Sleep убрать.
Я уже встречалс с блокировкой системных вызовов которые не должны блокироватся — так и не разобрался от куда ноги растут.
Отредактировано klen — 05/12/2005, 19:21 |