如何安全的杀死一个线程

superbug1984 2006-04-07 10:53:39
我在主线程里响应界面
new了一个新线程用来处理一大堆很耗cpu的操作,这些操作完成之后,怎样快速恢复cpu资源?
因为经过n次测试都发现,在子线程里操作完成之后,cpu仍然占100%

我用thread.Abort();但是这样会导致抛出一个异常,而且也根本不能正常返回
或者我在操作完成后,直接不处理,cpu资源也依然占用:(
请问大家都有什么好办法???

...全文
324 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnhao 2006-04-07
  • 打赏
  • 举报
回复
这种情况我也碰到过,
gnhao 2006-04-07
  • 打赏
  • 举报
回复
可能的话把线程源码贴上来吧,
gnhao 2006-04-07
  • 打赏
  • 举报
回复
这不好说,安全的关闭一个线程序方法就那几种,那要看你在线程里做了什么才行,比如线程里还有什么资源没完全释放之类的不管用什么方法都会异常....
charles_y 2006-04-07
  • 打赏
  • 举报
回复
要想安全,就要从线程本身出发。

给线程一个条件,让它跳出处理程序,自然结束
superbug1984 2006-04-07
  • 打赏
  • 举报
回复
看了各位的提议,无非都是Join()之类的,我用过,不行!

OrangeSeaCoast(橙色海岸)的说法不行
方法我暂时没测试,但是我根本就不想要界面都退出了,而是只想子线程里处理操作都完毕之后,cpu资源占用能迅速降下来
bearocean 2006-04-07
  • 打赏
  • 举报
回复
private Thread thSun;
private void ThreadProc()
{
//Dosome thing
//I didnt care wheather the thread go end, I just want to kill her
//raise an event
killMe();
}

//Join sub thread
this.thdSub.Join
viena 2006-04-07
  • 打赏
  • 举报
回复
根本的办法还是调整线程执行的代码
Knight94 2006-04-07
  • 打赏
  • 举报
回复
private bool blnStopped;
private Thread thdSub;
private void ThreadFun()
{
while( !blnStopped )
{
//do some here in sub thread
}
}

-----Start sub thread-------
blnStopped = false;
thdSub = new Thread(new ThreadStart(ThreadFun));
thdSub.Start();

--Close thread
blnStopped = true;
thdSub.Join();
mobydick 2006-04-07
  • 打赏
  • 举报
回复
你用
Thread thread = new Thread(new ThreadStart(ThreadMethod));
thread.Start();

private void ThreadMethod()
{
for(int i = 0; i < 100000; ++i)
{
Thread.Sleep(1);
}
}

等循环执行完毕,你new出来的线程自动就终止了。
OrangeSeaCoast 2006-04-07
  • 打赏
  • 举报
回复
Dim abc As System.Diagnostics.Process()

abc = System.Diagnostics.Process.GetProcesses()
循环找到该进程, Kill就可以了
abc(该进程).Kill()
GXY2005 2006-04-07
  • 打赏
  • 举报
回复
根本的办法还是调整线程执行的代码
Muf 2006-04-07
  • 打赏
  • 举报
回复
Abort是会在线程中引起异常。
线程中要捕获这个异常。这个异常通常是用来通知线程,有人要关闭你这个线程了。所以,在异常处理中,应该释放线程所获得的各种资源。这才是比较安全的。
superbug1984 2006-04-07
  • 打赏
  • 举报
回复
自己小顶一下,up
superbug1984 2006-04-07
  • 打赏
  • 举报
回复
线程源码无非也就是先在主线程里做一些准备工作
到了差不多的时候new 一个子线程出来,对串口发数据

现在所有的数据都已经发完毕了,而这个子线程的发送方法却总是不能返回
从log4net纪录的日志内容来看,最后捕捉的异常也就是因为我调用 thread.Abort 抛出的
superbug1984 2006-04-07
  • 打赏
  • 举报
回复
我在子线程里有访问串口的操作
现在我已经把所有数据都已经写完毕了,这里面会涉及到无法回收的资源吗?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧