[問題] socket and thread

看板C_Sharp作者 (這就是人生嗎)時間16年前 (2009/10/26 13:28), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/1
各位先進好。 有一個關於在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

10/26 18:29, , 1F
把thread abort?
10/26 18:29, 1F

10/26 19:24, , 2F
我試過,abort()還是會等著block 跳出 ~>.<~
10/26 19:24, 2F

10/26 19:59, , 3F
我之前很像是abort 之後再把socket close就可以了..@@
10/26 19:59, 3F

10/28 07:55, , 4F
先設False再將_tcpListener停止(應該是stop)....
10/28 07:55, 4F

10/28 07:56, , 5F
只要你不停止 而又沒達到連接上線 它會一直停在Accept
10/28 07:56, 5F

10/28 07:57, , 6F
只要停止 它就會從Accept裡跳出來
10/28 07:57, 6F

10/28 07:58, , 7F
另外我在你_listenFlag的部分 都是自己設一個bool去控制的
10/28 07:58, 7F
文章代碼(AID): #1AvJEMdV (C_Sharp)