2010-09-07 7 views
0

我有一個QThread,它從套接字中讀取並在有任何可用數據時發送一個信號(QT信號)。 阻止讀取(2)會很容易,但是我需要能夠從外部停止線程而無需等待太久。如何中斷在QThread中運行的選擇/ pselect

如果我使用pthread,我會使用pselect和pthread_kill(thread_id, some_signal),但QThread不是 似乎有任何類似的方法。並且將pthread的依賴添加到此項目似乎並不優雅。

我也不想使用其他醜陋的方法,例如不斷嘗試從一些相對較小的超時讀取套接字。

編輯:套接字不是TCP,而是藍牙L2CAP。

回答

1

一個不太優雅,但簡單和工作的解決方案: 創建一個管道,讓選擇等待管道或我的套接字。這樣我就可以隨時通過向管道寫入東西來阻止等待。

0

您可以發送信號到QThread的terminate()插槽。這將根據操作系統調度策略停止您的線程。

1

您可以使用QTcpSocket的異步接口來代替自己處理線程。檢查出Fortune Client example

+0

這看起來像我需要的,但我的套接字不是TCP(它們是L2CAP藍牙套接字)。有什麼類似的嗎?我找不到任何東西,但那並不代表沒有:-) – cube 2010-09-07 14:51:53

+1

我沒有使用它,但是藍牙模塊的這個類看起來是正確的:http://doc.qt.nokia.com/ qtextended4.4/qbluetoothl2capsocket.html – Scott 2010-09-07 14:59:48

相關問題