我真的不確定如何解決這個問題,所以我會先解釋它。 我需要運行一些線程,每個線程通過TCPSocket連接到某個應用程序,到目前爲止沒有問題。該應用程序非常耗時,這就是爲什麼我希望它在多個線程上並行運行,並且每個線程都與它進行通信的原因。一旦計算完成,我想將結果發送到另一個線程收集結果。爲此 我寫了一個Worker類:Qt多線程QThreads保持TCP連接並重用
class Worker : public QObject {
Q_OBJECT
public:
Worker();
Worker(int port);
~Worker();
QTcpSocket* sock;
void insert();
public slots:
void connect();
void process(const int &id, const QString ¶m, const int &arity);
signals:
void ready();
void finished(const int &id, const int &consistent, const QString &result);
void error(QString err);
};
現在superThread應該工作過一個巨大的文件,需要傳播它周圍的線程,然後接收和處理結果。我的做法到目前爲止)連接在主(如下另一superThread:
QThread* superThread = new QThread();
supWorker* super = new supWorker();
for (int i = 0; i < nrWorkers; i++){
Worker* worker = new Worker(portRange+i);
QThread* workerThread = new QThread();
QThread::connect(workerThread, SIGNAL(started()), worker, SLOT(connect()));
worker->moveToThread(workerThread);
workerThread->start();
QThread::connect(super, SIGNAL(process(int, QString, int)), worker, SLOT(process(int,QString,int)));
QThread::connect(worker, SIGNAL(finished(int, int, QString)), super, SLOT(handleResult(int, int, QString)));
}
問題這種方式顯然是我只能將信號發送到所有連接線。我想要superThread做的只是將參數發送到其中一個線程。我不知道我如何處理連接,以便只有一個工作線程能夠接收它?
任何幫助或建築理念非常感謝,在此先感謝。
Sry,但我認爲這是廣泛的SO的方式。 – Bowdzone
Sry,編輯希望它現在更具體一點。 – yonobi