互斥体不阻塞的可视c ++线程

问题描述

| 我正在使用VC2005进行开发,而我遇到了线程问题。 我有一个从队列中取出数据并发送数据的线程。但是此线程发送一个请愿书,并且必须等待答案发送新的请愿书(我想设置超时以防止无限超时)。 我有一个像这样的线程:
while (true){
    dequeue()
    send()
    WaitForSingleObject(ptClass->getMutex(),10000);
}
但是,这个WaitForSingleObject永远不会停止...我有这样的初始化事件:
    HANDLE ghMutex = CreateEvent(NULL,FALSE,\"\");
这个想法是阻止线程停止发送数据,当答案到来时,取消阻止该线程发送新的请愿书...为什么永不停止? 问候     

解决方法

您拥有的该线程正在等待事件被设置为发出信号,以便可以再次将其唤醒。您必须将事件设置为使用SetEvent发出信号。由于我不知道您的体系结构,因此不确定您将在哪里进行操作,但这就是所缺少的。 WaitForSingleObject正在将线程移出CPU上下文,但不会再次被唤醒。 如果您希望它等待直到事件被设置为已发出信号,并且您不能保证它将立即发生,则应将“等待”的超时设置为“无限”。 您没有使用互斥锁,而是使用了AutoResetEvent,但必须对其进行设置!