Проблема в следующем: программа игнорирует нужный мне WaitForSingleObject, продолжая работать дальше. Страсть как обидно.
Привожу исходный текст своего бедствия:
using std::cout;
HANDLE mut;
DWORD WINAPI thread_1(LPVOID lpParameter)
{
cout<<"Thread 1. Wait...\n";
Sleep(3000);
cout<<"3s\n";
ReleaseMutex(mut);
CloseHandle(mut);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE mut = CreateMutex(NULL, false, L"Mutex1");
HANDLE tr1 = CreateThread(NULL, 0, &thread_1, NULL, 0, 0);
WaitForSingleObject(mut, INFINITE);
cout<<"Exit...\n";
Sleep(5000);
cout<<"5s\n";
return 0;
}
Предполагалось, что результатом работы будет вот что:
-------------------
Thread 1. Wait...
3s
Exit...
5s
-------------------
А не тут-то было:
-------------------
Exit...
Thread 1. Wait...
3s
5s
-------------------
Т.е. _tmain плюет на WaitForSingleObject(mut, INFINITE) и, не дожидаясь ReleaseMutex(mut), скачет дальше. Почему?
Стоит поменять в WaitForSingleObject mut на tr1 — работает, как полагается.