#qt
#qt
Вопрос:
Как достигается параллельная обработка в Qt. Предположим, мне нужно вызвать две функции, которые выполняют последовательную связь с несколькими подключенными последовательными устройствами.
Func_A() обрабатывает последовательную связь с устройством 1, а Func_B() обрабатывает последовательную связь с устройством 2 и так далее, Но оба должны передаваться параллельно, а не последовательно.
Мотивом является одновременная связь с несколькими устройствами, подключенными через serial / Ethernet.
Ответ №1:
Если вы используете неблокирующие функции для обмена данными, вы можете без проблем обрабатывать все ваши последовательные сообщения в одном потоке. Каждое устройство (QSerialPort) будет выдавать сигнал (т. Е. Вызывать функцию) при получении данных. Оттуда вы можете декодировать эти данные в соответствующие слоты. Отправка данных может быть инициирована либо событиями пользовательского интерфейса, либо таймерами, либо любым другим событием. Это самое простое.
Если вы действительно выполняете тяжелые вычисления при кодировании / декодировании связи, вы можете создать несколько QThread, по одному для обработки каждого устройства. И затем вы можете подключать сигналы между вашими разными потоками с помощью Qt::QueuedConnection (автоматически), чтобы избежать необходимости в мьютексе или другой логике синхронизации между потоками.