积极答复者
子线程执行read操作阻塞时,父线程如何结束子线程?

问题
-
网络服务器程序中,服务器监听到有新的连接后就开一个新的子线程去处理相关操作。在子线程中,执行tcp.GetStream.read去读取远程host的数据。
子线程的框架是:
try { while(true) { string buffer = tcp.GetStream.read(); ...... } } catch(Exception e) { ..... } finally { tcp.GetStream.close(); tcp.close(); }
当服务器监听线程想结束子线程时,我在监听线程中调用如下语句:
childThread.Abort(); childThread.Join();
但是经调试发现,abort不能结束子线程,子线程仍然阻塞在read调用处。 然后监听线程也阻塞在Join调用处。
请问各位有什么办法可以解决上面的问题吗?谢谢
答案
-
可以直接关闭连接套接字,这样可以引发Read语句的异常,在异常中跳出循环,结束线程.
- 已标记为答案 Cookie Luo 2011年3月16日 14:04
全部回复
-
可以直接关闭连接套接字,这样可以引发Read语句的异常,在异常中跳出循环,结束线程.
- 已标记为答案 Cookie Luo 2011年3月16日 14:04
-
网络服务器程序中,服务器监听到有新的连接后就开一个新的子线程去处理相关操作。在子线程中,执行tcp.GetStream.read去读取远程host的数据。
子线程的框架是:
try { while(true) { string buffer = tcp.GetStream.read(); ...... } } catch(Exception e) { ..... } finally { tcp.GetStream.close(); tcp.close(); }
当服务器监听线程想结束子线程时,我在监听线程中调用如下语句:
childThread.Abort(); childThread.Join();
但是经调试发现,abort不能结束子线程,子线程仍然阻塞在read调用处。 然后监听线程也阻塞在Join调用处。
请问各位有什么办法可以解决上面的问题吗?谢谢
因为abort 处事给子线程产生一个exception 通过exception来中断
子线程只有在非阻塞状态下可以响应
所以让阻塞线程的组件主动抛出exception是最好的办法
入了ipad,最近用ipad上论坛