日期:2014-05-17  浏览次数:21165 次

C# 创建线程 线程处理完 利用return 返回 但系统句柄始终不释放 在线等大虾指教!
使用如下代码创建线程  
osThread   =   new   Thread(new   ThreadStart(oService.SocketRun));
osThread.Start();
oService.SocketRun   完成任务后利用   return   返回  
发现由于创建线程增加的   句柄并不释放,请问大虾们有何办法   释放句柄,或者是由什么其它方法由子线程自动   终止   ,而不需要通过父线程来终止?   多谢了

------解决方案--------------------
可以放在线程池里吧
------解决方案--------------------
在实例 osThread 确认失效后才会回收句柄,你可以在oService.SocketRun 方法结束前利用事件抛给主线程,在主线程上(注意同步Invoke)结束线程,并只强制回收osThread就可以(osThread.dispose)。
------解决方案--------------------
其实我觉得这很正常,不是线程结束了,句柄就会立即消失.
以下是我的看法:
线程有自己的计数器和自己的上下文,当技术器=0时候,系统会释放资源.注意是系统管理,所以当中也有端时间.我们看os这本书经常能看到线程的3态,其实还有一态,称为僵尸态,也就是在linux下面的僵尸进程.其意思就是结束了,但是系统还没有释放资源,它的生命期就是这段时间.windows是多线程模型,它的线程和unix下面的进程作用基本相同.
------解决方案--------------------
嘿嘿,不好意思,我把线程看成了进程。
线程中断方法是这样的:
osThread.Join();
osThread.Abort();

最好在线程开始前再加上这句:
osThread.IsBackground=true;
osThread.Start();
------解决方案--------------------
提醒下:
线程变量最好是定义在另一个窗体或者模块里运行,这样在关闭那个窗体的事件里面:
osThread.Join();
osThread.Abort();
并在窗体关闭后释放资源窗体资源:frm.Dispose();
一般线程就会随之释放资源。