【问题标题】:Synchronizing a thread with two running threads, c++, windows将一个线程与两个正在运行的线程同步,c++,windows
【发布时间】:2013-05-27 22:08:34
【问题描述】:

我是多线程编程的新手,这是我在这里的第一篇文章!所以请多多包涵。

我有两个摄像头,我想同时跟踪一个对象(两个独立线程)并将其位置输出到主函数或第三个线程。使用来自每个摄像机的对象的位置,然后应该计算对象的 3D 位置。假设第一个摄像头输出 x1y1,第二个摄像头输出 x2y2,应该使用这些估计 xyz

我正在考虑将 x1y1x2y2 定义为全局变量,以便它们第三个线程很容易访问。但问题是第三个线程应该与前两个线程同步。第三个线程不会改变x1y1x2y2的内容。它只使用这些值来获取 xyz。但是如果值 x1y1 更新了并且 x2y2 还没有更新,我想要第三个线程暂停,直到 x2y2 更新。或者换句话说,我希望第三个线程使用理想的 x1y1x2y2在时间点 t 或在很短的时间内获得。

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

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

【问题讨论】:

  • 您是否或可以对用于生成 [x,y] 的帧的到达时间进行时间戳记?更好的是——相机可以在图像采集时生成时间戳吗?

标签: c++ windows multithreading synchronization createthread


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2020-07-27
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多