带有互斥对象的Visual c++线程未阻塞

Visual c++ thread with mutex not blocking

本文关键字:线程 c++ Visual 对象      更新时间:2023-10-16

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

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

我有一条这样的线索:

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

但是这个WaitForSingleObject从未停止。。。我初始化了这样的事件:

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

这个想法是阻止线程停止发送数据,当答案出来时,取消阻止这个线程发送新的请愿书。。。为什么从不停止???

关于

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

WaitForSingleObject正在将线程从CPU上下文中取出,但它不会再次被唤醒。

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

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