Я работаю над приложением (c++
), которое использует несколько типов оборудования для одновременного сбора данных различных типов. Обычная схема использования - запускать различные интерфейсы к этим устройствам (отслеживание глаз, отслеживание движения, визуализация и т. Д.) Каждый в своем собственном потоке, чтобы они как можно меньше связывались друг с другом. Мне не нужна гарантия сверхточного времени, когда потоки действительно выполняются, что, как я понимаю, потребует аппаратных таймеров. Однако я хочу, чтобы потоки могли запрашивать какой-то центральный таймер, который они могут периодически использовать для добавления меток времени к собранным данным, чтобы данные можно было (полуточно) выровнять позже для анализа. Точность в миллисекундном масштабе хороша для этой цели.
Приложение использует Qt
для графического интерфейса, поэтому я подумал, что QElapsedTimer будет потенциальным решением. Тем не менее, документы утверждают, что все методы reentrant , а не потокобезопасные. Правильно ли я понимаю, что для этого необходим уникальный QElapsedTimer
объект для каждого потока, который хочет использовать этот тип функций синхронизации? Если это так, мой подход заключается в том, чтобы каждый поток инициализировал синхронизацию в функции блокировки (выполняемой в основном потоке). Инициализация может включать создание объекта-обертки, который объединяет таймер + смещение от «основного» таймера, так что любые / все созданные таймеры «синхронизируются» с основным таймером. Это будет сделано в основном потоке, чтобы получить смещение от не поточного безопасного исходного таймера.
Это разумный подход, или есть лучший "стандартный" подход (шаблон), который я должен использовать вместо этого? Или есть другая библиотека, которая лучше подходит для моих целей? В настоящее время я работаю над Windows (7 и XP), но в конечном итоге приложение будет кроссплатформенным.