Добрый день.
У меня в цикле создается поток и я жду, используя WaitForMultipleObjects, что поток либо установить Event0, либо установит Event1, либо пройдет 300мс.
В лог я выдаю результат, который установил поток, и то, что словил WaitForMultipleObjects. Однако периодически эти результаты отличаются. В может быть причина? Код следующий:
typedef struct
{
HANDLE resEventUseTrue;
HANDLE resEventUseFalse; //false, если IP не найден и его можно присваивать клиенту.
}
type_sendThread;
static void _sendThread (void* data)
{
type_sendThread d = *(type_sendThread*)data;
srand( GetCurrentThreadId () + (unsigned) time (NULL));
u32 pos = (rand () % 300);
_log ("Thread: Sleep %d.", pos);
Sleep (pos);
if ((pos / 2) * 2 == pos)
{
_log ("Thread: Set use False.");
SetEvent(d.resEventUseFalse);
}
else
{
_log ("Thread: Set use True.");
SetEvent(d.resEventUseTrue);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
while (1)
{
HANDLE hEvents[2];
hEvents[0] = CreateEvent(NULL, false, false, NULL);
hEvents[1] = CreateEvent(NULL, false, false, NULL);
if (hEvents[0] == NULL || hEvents[1] == NULL)
{
AERROR ("Main: CreateEvent failed.");
return true;
}
type_sendThread data;
data.resEventUseTrue = hEvents[0];
data.resEventUseFalse = hEvents[1];
if (_beginthread (_sendThread, 0, &data) == -1)
{
_log ("Main: _beginthread () failed.");
return true;
}
DWORD res = WaitForMultipleObjects(2, hEvents, false, 300);
if (res == WAIT_TIMEOUT)
{
// Вышли по timeout.
_log ("Main: Timeout.");
}
else if (res == WAIT_OBJECT_0)
{
// Вышли по sendEvent для resEventTrue.
_log ("Main: Set use True.");
}
else if (res == WAIT_OBJECT_0 + 1)
{
// Вышли по sendEvent для resEventFalse.
_log ("Main: Set use False.");
}
else
{
LOGINTBUG;
}
CloseHandle (hEvents[0]);
CloseHandle (hEvents[1]);
}
return 0;
}