Параллельная обработка в QT

#qt

#qt

Вопрос:

Как достигается параллельная обработка в Qt. Предположим, мне нужно вызвать две функции, которые выполняют последовательную связь с несколькими подключенными последовательными устройствами.

Func_A() обрабатывает последовательную связь с устройством 1, а Func_B() обрабатывает последовательную связь с устройством 2 и так далее, Но оба должны передаваться параллельно, а не последовательно.

Мотивом является одновременная связь с несколькими устройствами, подключенными через serial / Ethernet.

Ответ №1:

Если вы используете неблокирующие функции для обмена данными, вы можете без проблем обрабатывать все ваши последовательные сообщения в одном потоке. Каждое устройство (QSerialPort) будет выдавать сигнал (т. Е. Вызывать функцию) при получении данных. Оттуда вы можете декодировать эти данные в соответствующие слоты. Отправка данных может быть инициирована либо событиями пользовательского интерфейса, либо таймерами, либо любым другим событием. Это самое простое.

Если вы действительно выполняете тяжелые вычисления при кодировании / декодировании связи, вы можете создать несколько QThread, по одному для обработки каждого устройства. И затем вы можете подключать сигналы между вашими разными потоками с помощью Qt::QueuedConnection (автоматически), чтобы избежать необходимости в мьютексе или другой логике синхронизации между потоками.