1
我必須管理由更多udp通道消息更新的MainWindow。此外,閱讀配置文件,我必須顯示或不主窗口,如果不管理/派遣/過濾udp消息到另一個應用程序。是否可以定義一個引擎類來管理通信並更新Mainwindow(如果顯示)?我如何管理主窗口?也許使用單身? 我會做什麼(僞代碼):在工作線程中使用QT MainWindow
main.cpp中:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Engine app();
app.run();
return a.exec();
}
Engine.cpp
Engine::Engine(QObject *parent):
QObject(parent)
{
show_mainwindow = false;
thread = new QThread();
Worker = new Worker();
// Filter/Dispatch
Worker->moveToThread(thread);
connect(Worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(thread, SIGNAL(started()), Worker, SLOT(process()));
connect(Worker, SIGNAL(finished()), thread, SLOT(quit()));
connect(Worker, SIGNAL(finished()), Worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
// Message Receiver (more)
UdpRecvr = new Receiver();
connect(UdpRecvr, SIGNAL(receivedMsg(const QByteArray)), udpManager, SLOT(processMsg(const QByteArray)));
//Mainwindow Singleton used to update with SIGNAL/SLOT
WINDOWINSTANCE = MainWindow::GetInstance();
if(show_mainwindow)
{
WINDOWISTANCE->show();
}
}
此外,在UdpRecvr類我會用主窗口辛格爾頓。我讀過使用帶SIGNAL/SLOT的單身人士是線程安全的。這是一個適當的設計方案嗎? 在此先感謝。
不建議使用線程工作者。如果使用基於任務的線程,則更好(檢查QtConcurrent) – Apin