我遇到了一个非常奇怪的问题:尽管信号量已经为0,但是windows.h中的WaitForSingleObject()无法阻塞线程。
这是我的代码:
int main(int argc, char** argv)
{
MsgQueue mainQueue;
//WaitForSingleObject(mainQueue.procSema,(DWORD)(INFINITE));
mainQueue.Enqueue_Back(_T("hello world!"));
mainQueue.Enqueue_Back(_T("This is the second test line"));
mainQueue.Enqueue_Back(_T("Here's the third line"));
TCHAR buffer[256];
int ct = 0;
while(true)
{
cout<<"Start wait ... "<<ct++<<endl;
WaitForSingleObject(mainQueue.procSema,(DWORD)(INFINITE));
memset(buffer,0,256*sizeof(TCHAR));
mainQueue.Dequeue_Front(buffer,255);
cout<<buffer<<endl;
}
return 0;
}
我发现信号量 - mainQueue.procSema即使已经等待0也无法阻止循环。
信号量被声明并初始化为:
procSema = CreateSemaphore(NULL,(LONG)(0),(LONG)(INFINITE),NULL);
并在每个enqueue函数中,它将由一个
发出信号ReleaseSemaphore(procSema,(LONG)(1),NULL);
我试图在我第一次入队之前添加多个等号行,但它仍然不起作用......
请帮助我..环境:
VC2012 Ult,Windows7 Ult,从一个空项目开始