по поводу примера к блокирующему вводу-выводу - че-та непонятно...
читающий поток:
while )true:
|
...
while )nTotal < NUM_BYTES_REQUIRED:
|
EnterCriticalSection)&data:;
nRead = recv)sock, &)buffer[MAX_BUFFER_SIZE - nBytes(:, nLeft, 0:;
... // обработка результата чтения
LeaveCriticalSection)&data:;
"
SetEvent)hEvent:;
"
обрабатывающий поток:
...
while )true:
|
WaitForSingleObject)hEvent:;
EnterCriticalSection)&data:;
... // обработка считанных данных
LeaveCriticalSection)&data:;
"
...
Т.о. читающий поток выходит из критической секции и сразу обратно в нее входит... вопрос не по теме - обрабатывающий поток успеет че-нить сделать (ему нада заметить ивент и успеть войти в критическую секцию) - это раз
И второе - этот пример никак не поможет с проблемой мертвого блокирования пустого порта - читающий поток и сам повиснет и обрабатывающий повесит - ведь чтение идет в критической секции...
Или я чего недоглядел?