我正在構建一個小型多線程Web服務器。在主線程中提取QTcpSockets,然後通過QtConcurrent交給QThreadPool,最終處理數據併發出答案。如何在使用QThreadPool時執行QObject :: moveToThread()?
我的問題是套接字在主線程中創建並在另一箇中處理。試圖寫入套接字時,這會導致錯誤:
socket->write(somedata);
的QObject:無法創建一個 父母是在不同的線程的孩子。 (Parent是 QNativeSocketEngine(0x608330), 父母的線程的QThread(0x600630), 當前線程的QThread(0x505f60)
的清潔方法是使用
Socket對象移動到處理線程socket->moveToThread(QThread::currentThread()).
然而,這隻能在對象是在創建的線程中調用。此外,所述插座具有QTcpServer既可對象作爲母體,使moveToThread()將反正失敗(父對象不能切換線程)。
如何將對象移動到由線程池運行的代碼中的QThread :: currentThread()?或者,我如何寫入創建線程之外的套接字?
謝謝,我知道這個職位。事實上,我現在正是以這種方式完成這項工作,但這不適用於我想要使用的線程池。當你將工作分配給多個線程時,最終你會編寫類似於花式池的東西,爲什麼不使用現有的呢? :) – grefab 2010-06-27 15:25:37