Я хочу задать вопрос об архитектуре приложения
1. Будет основной поток GUI для обеспечения взаимодействия пользователя
2. Получать поток на основе UDP-сокета, который будет получать пакеты UDP (0)
3. Другой поток для отправки событий, а также периодических UDP-пакетов.
Как реализовать эту архитектуру в Qt, в основном у меня есть следующие вопросы:
1. Для получения темы , как мне сделать это блокирование?
Я знаю о сигнале readyRead(), и я могу подключить его к некоторому слоту, который будет обрабатывать дейтаграмму, но как это сделать, чтобы этот поток выполнял это навсегда.
2. В send Thread я могу сгенерировать сигнал из потока GUI, который будет приниматься потоком передачи, и слот здесь будет записывать некоторые данные в сокет, но опять же, как этот поток сохранится, когда ему нечего послать, Я имею в виду цикл, опрос чего-то?Qt блокирующие потоки и связь между потоками
1
A
ответ
1
Использовать циклы событий во вторичных потоках.
QThread::exec() запускает цикл событий потока, который будет работать до тех пор, пока не вызывается QThread::quit(). Это должно решить вашу проблему «как подождать, пока что-то случится». По умолчанию реализация QThread::run() просто вызывает exec()
, поэтому я бы пошел с этим. Вы можете настроить все в своем методе main(), например. для отправителя резьбы:
//Create UI
MainWindow mainWindow;
mainWindow.show();
//set up sender thread and the QObject doing the actual work (Sender)
QThread senderThread;
Sender sender; //the object doing the actual sending
sender.moveToThread(&sender); //move sender to its thread
senderThread.start(); //starts the thread which will then enter the event loop
//connect UI to sender thread
QObject::connect(&mainWindow, SIGNAL(sendMessage(QString)), &sender, SLOT(sendMessage(QString)), Qt::QueuedConnection);
...
const int ret = app.exec(); // enter main event loop
senderThread.quit(); //tell sender thread to quit its event loop
senderThread.wait(); //wait until senderThread is done
return ret; // leave main
Отправитель будет просто QObject с SendMessage() слот делает отправку, а QTimer плюс еще один слот для периодических пакетов UDP и т.д.
Смежные вопросы
- 1. Связь между потоками в Qt
- 2. Связь между потоками
- 3. Потоковая связь между потоками
- 4. Связь между несколькими потоками
- 5. Связь между потоками java
- 6. Связь между потоком Java и потоками ОС
- 7. Task.Factory и связь между потоками
- 8. C# Связь между потоками
- 9. Связь между рабочими потоками
- 10. связь между потоками
- 11. потоковая связь между потоками
- 12. Связь между двумя потоками
- 13. Связь Между двумя потоками
- 14. Связь между потоками между производителями и потребителями
- 15. Связь между потоками в PySide
- 16. C++ - Многопоточность - Связь между потоками
- 17. Многопользовательские блокирующие рабочие потоки
- 18. Используются ли блокирующие потоки?
- 19. fwrite fopen блокирующие потоки
- 20. lua lanes связь между потоками
- 21. iPhone Простая связь между потоками
- 22. Связь между потоками без IPC
- 23. связь между потоками в java
- 24. Какова наилучшая связь между потоками?
- 25. Какова связь между потоками TYPO3 и TYPO3?
- 26. Связь между лимитом стека и потоками
- 27. Связь между потоками ядра в Linux
- 28. Связь между потоками через делегатов?
- 29. Связь между потоками в Java
- 30. Связь между двумя потоками в pthread