作者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
1F:推 cnp:把thread abort? 10/26 18:29
2F:→ freewhat:我试过,abort()还是会等着block 跳出 ~>.<~ 10/26 19:24
3F:→ cnp:我之前很像是abort 之後再把socket close就可以了..@@ 10/26 19:59
4F:推 bdvstg:先设False再将_tcpListener停止(应该是stop).... 10/28 07:55
5F:→ bdvstg:只要你不停止 而又没达到连接上线 它会一直停在Accept 10/28 07:56
6F:→ bdvstg:只要停止 它就会从Accept里跳出来 10/28 07:57
7F:→ bdvstg:另外我在你_listenFlag的部分 都是自己设一个bool去控制的 10/28 07:58