作者freewhat (這就是人生嗎)
看板C_Sharp
標題[問題] socket and thread
時間Mon Oct 26 13:28:52 2009
各位先進好。
有一個關於在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