带有互斥对象的Visual c++线程未阻塞
Visual c++ thread with mutex not blocking
我正在使用VC2005进行开发,但我遇到了一个线程问题。
我有一个线程从队列中取出数据并发送。但这个线程发送了一个请愿书,必须等待答案才能发送新的请愿书(我想设置一个超时来防止无限超时)。
我有一条这样的线索:
while (true){
dequeue()
send()
WaitForSingleObject(ptClass->getMutex(),10000);
}
但是这个WaitForSingleObject从未停止。。。我初始化了这样的事件:
HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, "");
这个想法是阻止线程停止发送数据,当答案出来时,取消阻止这个线程发送新的请愿书。。。为什么从不停止???
关于
您拥有的这个线程正在等待事件被设置为信号,以便它可以再次被唤醒。您必须将事件设置为使用SetEvent发出信号。不确定你会在哪里做,因为我不知道你的架构,但这就是缺失的。
WaitForSingleObject正在将线程从CPU上下文中取出,但它不会再次被唤醒。
如果您希望等待直到事件被设置为信号,并且您不能保证它会立即发生,那么您的等待超时应该设置为INFINITE。
你没有使用互斥,你使用的是AutoResetEvent,但你必须设置它!
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 为什么我不能在 while 循环中创建线程?