重置线程事件 - C ++

时间:2010-12-09 16:30:04

标签: c++ multithreading visual-studio-2008 events thread-safety

假设我的线程函数中有一个switch语句,用于评估触发事件。每个案例都是不同的事件。最好是在案件结束时还是在案件结束时拨打ResetEvent?在我看来它应该在最后,所以不能再次触发事件,直到线程完成处理上一个事件。如果它被放置在开头,则可以在处理时再次触发事件。

2 个答案:

答案 0 :(得分:1)

是。认为这是要走的路。创建手动重置事件(CreateEvent API的第二个参数),以便在设置事件后不会自动重置事件。

答案 1 :(得分:1)

如果您使用单个Event对象处理传入流量(暗示您没有入站队列),您将错过事件。这真的是你想要的吗?

如果你想捕捉所有事件,那么一个成熟的生产者 - 消费者队列将是一个更好的选择。 Boost.Thread here的参考实现。

  

出现问题的一个问题   再用多线程代码是怎么回事   将数据从一个线程传输到   另一个。例如,一种常见的方式   并行化串行算法是   将其拆分为独立的块   并制作一条管道 - 每个阶段   管道可以单独运行   线程,每个阶段都添加数据   到下一阶段的输入队列   当它完成。为此工作   正确地说,输入队列需要   编写,以便数据安全   由一个线程添加并删除   另一个没有破坏的线程   数据结构。