看板 C_Sharp 關於我們 聯絡資訊
各位先進好。 有一個關於在thread 裡進行listen的問題想請教大家。 以下是一個 thread.start() 之後去執行的 function public void ListenForClients() { _tcpListener.Start(); try { while (_listenFlag) { //blocks until a client has connected to the server TcpClient handler = _tcpListener.AcceptTcpClient(); ..... } } } 當我server想要關閉的時候,如果這時候沒有任何client正要連進來, 則thread的程式會一直 block 在 AcceptTcpClient() 裡等待連線, 所以即使我把_listenFlag 設程 false也沒用。 在此架構下,(就是不用pendding()去偵測), 請問有什麼方法可以讓 thread 從block 狀態裡跳出來呢 ? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.103.214
cnp:把thread abort? 10/26 18:29
freewhat:我試過,abort()還是會等著block 跳出 ~>.<~ 10/26 19:24
cnp:我之前很像是abort 之後再把socket close就可以了..@@ 10/26 19:59
bdvstg:先設False再將_tcpListener停止(應該是stop).... 10/28 07:55
bdvstg:只要你不停止 而又沒達到連接上線 它會一直停在Accept 10/28 07:56
bdvstg:只要停止 它就會從Accept裡跳出來 10/28 07:57
bdvstg:另外我在你_listenFlag的部分 都是自己設一個bool去控制的 10/28 07:58