gpt4 book ai didi

c++ - 具有互斥锁的 Visual C++ 线程不阻塞

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:01 25 4
gpt4 key购买 nike

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

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

我有一个线程是这样的:

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

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

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

想法是阻塞线程以停止发送数据,当答案到来时,解除阻塞线程以发送新的请愿书......为什么永远不会停止???

问候

最佳答案

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

WaitForSingleObject 正在使您的线程脱离 CPU 上下文,但它不会再次被唤醒。

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

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

关于c++ - 具有互斥锁的 Visual C++ 线程不阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com