Синхронизация потока с двумя работающими потоками, c ++, windows

Я новичок в многопоточном программировании, и это мой первый пост здесь! Поэтому, пожалуйста, потерпите меня.

У меня есть две камеры, которые я хотел бы отслеживать объект одновременно (два независимых потока) и выводить его положение в основную функцию или, возможно, третий поток. Используя положение объекта от каждой камеры, 3D-положение объекта должно быть рассчитано. Допустим, первые выходы камеры x1 а также y1, выходы второй камеры x2 а также y2 и они должны быть использованы для оценки Икс, Y, а также Z.

Я думал об определении x1, y1, x2 а также y2 как глобальные переменные, чтобы они были легко доступны для третьего потока. Но проблема в том, что третий поток должен быть синхронизирован с первыми двумя потоками. Третий поток не меняет содержание x1, y1, x2 а также y2. Он использует только эти значения для получения Икс, Y а также Z. Но если значение x1 а также y1 обновляется и x2 а также y2 еще не обновлены, я хочу, чтобы третий поток приостановился до x2 а также y2 обновляется. Или, другими словами, я хочу использовать третий поток x1, y1, x2 а также y2 которые идеально получены в определенный момент времени T, или в течение очень короткого периода времени.

Я ценю любые предложения о том, как подойти к этой проблеме. Я думаю об использовании CreateThread (). Есть ли более простой способ?
Это хорошая идея использовать глобальные переменные в многопоточном программировании?
Это хорошая идея для вывода глобальных переменных t1 а также t2 (системное время) из потоков 1 и 2 соответственно и сравнить их в третьем потоке? Одна из проблем этого подхода может заключаться в том, что, поскольку оба потока 1 и 2 выполняют одно и то же, им требуется, скажем, T секунда, чтобы они выполнили свою задачу, и поэтому между этими потоками всегда существует фиксированная задержка, которая может быть больше, чем у нас. хочу. И в результате поток 3 никогда не найдет x1, y1, x2 а также y2 которые получены очень близко во времени!

ПРИМЕЧАНИЕ: я использую Windows 7, Visual Studio 2010, язык программирования C ++.

0

Решение

Поток 1 может SetEvent (событие1), а поток 2 может SetEvent (событие2). Поток 3 использует WaitForMultipleObjects для ожидания, пока оба события не будут установлены. WaitForMultipleObjects приостанавливает вызывающий поток и затем возвращается, когда оба события установлены.

1

Другие решения

Других решений пока нет …