1

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

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

我有一个这样的线程:

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

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

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

思路是阻塞线程停止发送数据,等答案来了,解除阻塞这个线程发送新的请愿书……为什么永远不会停止???

问候

4

1 回答 1

1

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

WaitForSingleObject 将您的线程带出 CPU 上下文,但它不会再次被唤醒。

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

您没有使用互斥锁,您使用的是 AutoResetEvent,但您必须设置它!

于 2011-05-25T10:57:13.783 回答