Мне удалось реализовать приложение на основе Qt с графическим интерфейсом в рабочем C ++ std::thread
, как описано здесь .Теперь мне нужны как основной, так и рабочий потоки для связи.
Мой вопрос таков: как я могу передавать сообщения (массив с плавающей точкой) из основного потока в рабочий поток, чтобы я мог обновить графический интерфейс?
У меня есть приложение, которое выполняет обработку сигналов в режиме реального времени.Моя цель - создать графический интерфейс Qt, который можно подключить к моему приложению, чтобы визуализировать различные сигналы, не влияя на аспект в реальном времени.Я исследовал различные методы для достижения этой цели и пришел к выводу, что этот пост достаточно подробно описывает то, что мне нужно, и предлагает решение для этого.Тем не менее, нет никакой информации о том, как основной и рабочий потоки могут взаимодействовать друг с другом.
Я пытался использовать подход Futures / Promises, описанный здесь , для осуществления связи между потоками.Хотя я смог запустить этот пример, я не смог интегрировать его в свой проект.Причина заключается в том, что этот подход основан на наличии занятого цикла внутри рабочего потока, который постоянно проверяет, было ли новое сообщение отправлено основным потоком.Однако в приложении Qt программа блокируется, как только она входит в главный цикл обработки событий в a.exec()
.Это предотвращает проверку занятого цикла и, следовательно, приводит к взаимоблокировке программы.
Так я порождаю рабочий поток графического интерфейса пользователя (на основе этого сообщения).
#include <thread>
// Start the Qt realtime plot demo in a worker thread
int argc = 0;
char **argv = NULL;
std::thread t1
(
[&] {
QApplication application(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return application.exec();
}
);