WaitForSingleObject не дожидается ReleaseMutex
От: Privaloff  
Дата: 30.12.05 19:28
Оценка:
Проблема в следующем: программа игнорирует нужный мне 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 — работает, как полагается.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.