通过事件在两个线程之间进行单向通信

时间:2010-12-08 14:09:07

标签: c++ multithreading events

我有两个线程以下列方式通信:线程A在消息队列中发布消息,线程B处理该消息。线程A必须等到线程B处理消息。

  1. 主题A

    .........
    在消息队列上发布消息
    WaitForSingleObject(hEvent)
    使用消息处理信息
    SetEvent的(hEvent)
    .........

  2. 主题B

    处理消息队列中的消息
    SetEvent(hEvent)

  3. 您是否看到上述代码存在任何问题?我需要在任何地方调用ResetEvent()吗? 线程A或线程A中所需的SetEvent()调用是否应仅调用WaitForSingleObject()而线程B应仅调用SetEvent()?

    提前致谢

2 个答案:

答案 0 :(得分:4)

只要事件是 AutoReset 事件,您就无需致电ResetEvent。此参数在CreateEvent中设置。我认为你的伪代码没问题。

答案 1 :(得分:2)

您需要考虑的一个问题是这可能导致死锁。如果线程A必须等到线程B在继续之前处理事件(并且您的WaitForSingleObject调用没有传递给它的有用超时值),则线程B有可能永远不会处理该事件并将锁定线程A. / p>