boost asio io執行緒退出的問題

2021-07-05 12:54:04 字數 508 閱讀 1278

這兩天在review客戶端networkclient的**,

因為之前遇到了 斷開第一次鏈結後,再想鏈結就再也鏈結不上的問題。

最後查到因為我的io_service沒有構造出乙個 work,

boost::io_serivice 需要有個io_service::work來keep住,

如果沒有work,在一次啟動的時候io執行緒是正常執行的(所以之前一直沒有什麼問題,因為我客戶端只做一次連線),但是在close掉並做第二次連線的時候,io執行緒就exit了,

所以想再去做第二次連線是不可能成功的。

之中還遇到乙個問題,如果呼叫過io_serivce.stop,重新起io執行緒去run的話,是並沒有什麼卵用的。所以在客戶端不準備做任何socket重連之前,不要掉用io_service.stop,

否則你需要重新構造乙個io_service並帶上work,才能再次啟動網路模組。 

建議放在networkclient的析構函式中,或者不呼叫,因為析構io_service析構函式會處理一切。

Python 子執行緒退出孫執行緒不退出

遇到了乙個大坑!如圖,在子執行緒threadfunc退出之後,threadfunc2依舊在執行。根本不會結束 但是官方文件中說明了,只要設定了daemon不為none 就能設定子執行緒是守護執行緒,這樣執行緒退出的時候,子執行緒也會退出 如果不是 none,daemon 引數將顯式地設定該執行緒是否...

iOS 執行緒退出

主要做法 一 在子執行緒 runloop runmode nsdefaultrunloopmode beforedate nsdate distantfuture 然後在主線程呼叫 self performselector selector forceexit onthread thread wit...

多執行緒退出

多執行緒退出,有兩種安全的退出方法。呼叫waitforsingleobject。必須在同乙個執行緒,否則會造成阻塞。例子如下 m pthreadrec afxbeginthread thread tcpserverreceive,this uint thread tcpserverreceive l...