将一个线程与两个正在运行的线程同步,c++,windows
Posted
技术标签:
【中文标题】将一个线程与两个正在运行的线程同步,c++,windows【英文标题】:Synchronizing a thread with two running threads, c++, windows 【发布时间】:2013-05-27 22:08:34 【问题描述】:我是多线程编程的新手,这是我在这里的第一篇文章!所以请多多包涵。
我有两个摄像头,我想同时跟踪一个对象(两个独立线程)并将其位置输出到主函数或第三个线程。使用来自每个摄像机的对象的位置,然后应该计算对象的 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++。
【问题讨论】:
您是否或可以对用于生成 [x,y] 的帧的到达时间进行时间戳记?更好的是——相机可以在图像采集时生成时间戳吗? 【参考方案1】:线程 1 可以 SetEvent(event1),线程 2 可以 SetEvent(event2)。线程 3 使用 WaitForMultipleObjects 等待两个事件都设置完毕。 WaitForMultipleObjects 挂起调用线程,然后在两个事件都设置时返回。
【讨论】:
以上是关于将一个线程与两个正在运行的线程同步,c++,windows的主要内容,如果未能解决你的问题,请参考以下文章