2015-01-04 2 views
0

Я пишу простой чат UDP в Qt. Существует класс QUDPSocket, обеспечивающий прослушивание и отправку сообщений. Проблема в том, что она управляется сигналами, поэтому я должен вызвать приложение app.exec(), иначе прослушивание не будет излучать никакого сигнала. Это мой main.cpp:Qt - как инициализировать некоторые действия изнутри приложения?

#include <QtGui/QApplication> 
#include "receiver.h" 

int main(int argc, char *argv[]) 
{ 
QApplication app(argc, argv); 
int port = 5555; 
Receiver rec; 
rec.startListening(port); 
for(int i = 0; i < 5000; i++) 
{ 
    QByteArray ba; 
    ba = "Hello"; 
    rec.send(ba, QHostAddress::LocalHost, port); 
    ba = rec.getLastMsg(); 
    QTextStream(stdout) << i << ":" << ba.data() << endl; 
} 

return app.exec(); 
} 

проблема Ну это QUdpSocket начинают работать после того, как app.exec() называется. Это безумие. Есть ли способ, предоставляемый Qt для обработки этого без использования другого потока для отправки пакетов UDP?

Благодаря

ответ

0

App.exec() начинается основной цикл и не мешает вам посылать пакеты в том же потоке вообще. Вам просто нужно отправить их на основе событий - например, при нажатии клавиши ввода или таймера, если вы просто тестируете. Это то, как программирование на основе событий работает в основном по всем инструментариям.

+0

Но как я могу добавить код в цикл бесконечности app.exec(), который будет снова и снова запускаться с функциями обновления GUI? Somethink like (if exists): app.addFunctionToLoop (функция); а затем app.exec(); – Jurass

+0

Как я уже говорил, вы можете использовать таймеры, см., Например, [QTimer] (http://qt-project.org/doc/qt-4.8/timers.html) – jku

Смежные вопросы