具有互斥锁的Visual c ++线程没有阻塞

时间:2011-05-25 10:50:55

标签: c++ multithreading visual-studio-2005 waitforsingleobject

我正在使用VC2005开发,我遇到了线程问题。

我有一个线程从队列中取出数据并发送它。但是这个帖子发送了一个请愿书,并且必须等待答案才能发送新的请愿书(我想暂停一下以防止无限超时)。

我有这样一个帖子:

while (true){
    dequeue()
    send()
    WaitForSingleObject(ptClass->getMutex(),10000);
}

但是这个WaitForSingleObject永远不会停止......我这样初始化事件:

    HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, "");

想法是阻止线程停止发送数据,当答案到来时,取消阻止此线程发送新请求......为什么永远不会停止???

问候

1 个答案:

答案 0 :(得分:1)

此线程正在等待事件设置为发信号,以便可以再次唤醒它。您必须使用SetEvent将事件设置为发出信号。不知道你在哪里做,因为我不知道你的架构,但那就是缺少的。

WaitForSingleObject使你的线程脱离CPU上下文,但它没有被再次唤醒。

如果您希望等待事件设置为发出信号并且您不能保证它会立即发生,那么您的等待超时应该设置为INFINITE。

你没有使用互斥锁,你正在使用AutoResetEvent,但你必须设置它!