У меня есть ситуация, когда у меня есть один объект-эмиттер и набор приемников. Приемники имеют один и тот же класс и фактически представляют собой набор устройств того же типа. Я использую структуру Qt.Динамическое изменение сигнала одному объекту в наборе
Сам эмиттер получает сигнал, запрашивающий информацию с одного из устройств.
В соответствующем слоте эмиттер должен проверить, какой из приемников «готов», а затем отправить собственный сигнал для запроса данных на одно из устройств (в зависимости от того, что готово в первую очередь).
Излучатель получает сигналы очень быстро, порядка миллисекунд. Есть три способа, которыми я могу думать о безопасном запросе данных только с одного из устройств (устройства живут в своих потоках, поэтому мне нужен механизм, защищенный потоками). Количество устройств не является статическим и может меняться. Общее количество устройств довольно невелико (определенно ниже 5-6).
1) Подключайтесь ко всем устройствам при их добавлении или удалении. Измените один запрос и сами объекты устройств отфильтровывают, является ли запрос для них использованием определенного тега устройства. Этот метод хорош, потому что слот запроса, в котором происходит проверка, будет выполняться в контексте выделенного потока, но расточительно по мере увеличения количества устройств.
2) Подключайте и отсоединяйте от объекта внутри излучателя на лету, когда необходимо отправить запрос.
3) Используйте QMetaObject :: invokeMethod(), когда необходимо отправить запрос.
Эксплуатация важна. Кто-нибудь знает, какой метод является «лучшим», или вообще есть лучший?
С уважением
Pris
Примечание: Для уточнения: Излучатель получает сигнал из приложения, чтобы получить информацию, опрашивая устройства. Сумасшедший ASCII искусство идут:
(приложение) < ----> (эмиттер) < ------> (приемники) < - | -> физические устройства
Я сформулировал вопрос плохо и обновил его, чтобы уточнить точку. 1) Да, но сейчас я беспокоюсь только о потоке сигнала от приложения к приемникам. 2) приемники идентичны, но не делят данные. ACE кажется, что это может быть слишком велико для этого. – Prismatic
@Pris Reactor все равно будет работать, даже если это не с 'ACE'. Я настраиваю ответ. – Karlson