Я застрял в действительно удивительной проблеме здесь. Код такой, как показано ниже.
class A
{
public:
A(){
m_event = CreateEvent(NULL, false, false, NULL); // create an event with initial value as non-signalled
m_thread = _beginthread(StaticThreadEntry, 0, this); // create a thread
}
static void StaticThreadEntry(A * obj) { obj->ThreadEntry(); }
void ThreadEntry();
};
void A::ThreadEntry()
{
WaitforSingleObject(m_event,INFINITE);
}
int main()
{
A a;
SetEvent(m_event); // sets the event to signalled state which causes the running thread to terminate
WaitForSingleObject(m_thread, INFINITE); // waits for the thread to terminate
return 0;
}
Проблема:
При выполнении приведенного выше кода иногда (1 из 5) он зависает, и элемент управления застревает в вызове WaitforSingleObject () (внутри основной функции). Код всегда вызывает функцию SetEvent (), чтобы поток будет прерван до вызова функции Wait ().
Не вижу причины, по которой оно должно зависать?