将线程与两个正在运行的线程,c ++,windows同步

时间:2013-05-27 22:08:35

标签: c++ windows multithreading synchronization createthread

我是多线程编程的新手,这是我的第一篇帖子!所以请耐心等待。

我有两个相机,我想同时跟踪一个对象(两个独立的线程),并将其位置输出到主函数或可能是第三个线程。使用来自每个相机的物体的位置,然后应该计算物体的3D位置。假设第一台摄像机输出 x1 y1 ,第二台摄像机输出 x2 y2 ,应该使用这些估计 x y z

我在考虑将 x1 y1 x2 y2 定义为全局变量,以便它们是容易访问第三个线程。但问题是第三个线程应该与前两个线程同步。第三个线程不会更改 x1 y1 x2 y2 的内容。它仅使用这些值来获取 x y z 。但是如果值 x1 y1 更新且 x2 y2 尚未更新,我想要第三个线程暂停,直到更新 x2 y2 。或者换句话说,我希望第三个线程使用理想情况下的 x1 y1 x2 y2 t 的时间点或在非常短的时间内获得。

我很欣赏有关如何解决此问题的任何建议。我正在考虑使用CreateThread()。有没有更简单的方法? 在多线程编程中使用全局变量是个好主意吗? 从线程1和2分别输出全局变量 t1 t2 (系统时间)是个好主意,并在第三个线程中进行比较?这种方法的一个问题可能是因为线程1和线程2都在做同样的事情,所以我们需要说T秒才能完成它们的任务,因此这些线程之间总有一个固定的延迟,这可能比我们的线程更长想。结果,线程3永远不会找到 x1 y1 x2 y2 这些非常接近及时!

注意:我使用的是Windows 7,Visual Studio 2010,编程语言C ++。

1 个答案:

答案 0 :(得分:1)

线程1可以是SetEvent(event1),线程2可以是SetEvent(event2)。线程3使用WaitForMultipleObjects等待,直到两个事件都已设置。 WaitForMultipleObjects挂起调用线程,然后在设置两个事件时返回。