c# 线程

xqh369 2010-04-20 01:56:39


public void Start()
{
foreach (string str in keyList)
{
while(mingling=="wait")
{
if (mingling == "stop") return;
Thread.Sleep(1000);
}
Thread th = new Thread(new ParameterizedThreadStart(manThread));
th.IsBackground = true;
th.Start(str);
}
}
private void manThread(object key)
{
//业务处理
if (mingling == "stop") return;
}


窗体上有个 “开始按钮”
当点击“开始按钮”
开启一个线程 调用 上面代码 中的 Start() 方法

运行一会儿CPU 占用率马上升为:80%--100%

但是我 改变了这个参数 mingling 的 值为 “stop”

没有继续新开线程了,但是CPU还是为 80%--100%
软件关闭恢复正常。
这是为什么呢?线程已经没有运行了,怎么CPU还是那么高?
...全文
134 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lljfl 2010-04-20
  • 打赏
  • 举报
回复

public void Start()
{
foreach (string str in keyList)
{
Thread th = new Thread(new ParameterizedThreadStart(manThread));
th.IsBackground = true;
th.Start(str);

while(mingling=="wait")
{
if (mingling == "stop") return;
Thread.Sleep(1000);
}
}
}
private void manThread(object key)
{
//业务处理
mingling = "stop";
}
lpingz 2010-04-20
  • 打赏
  • 举报
回复
死循环!
没有地方为mingling赋值"stop"
每一次都新建一个现成。
eloveo 2010-04-20
  • 打赏
  • 举报
回复
因为你是每遍历一个就新建了一个线程
eloveo 2010-04-20
  • 打赏
  • 举报
回复
这里牵涉到多线程了 而且你的部分代码没有贴出来 也看不出哪里错了
xqh369 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 eloveo 的回复:]

错误就在你while那里 当你得到mingling=wait时 你后面的处理没有break 根跟就没跳出循环 所以就一直死在那里。 你根本就用不着在forech里再加while
[/Quote]

当我 mingling=="start" 的时候不是就跳出循环了么。

我加一个 while 是为了实现暂停功能。
当我 mingling=="stop" 不是就退出整个方法了,所以不会造成死循环
eloveo 2010-04-20
  • 打赏
  • 举报
回复
错误就在你while那里 当你得到mingling=wait时 你后面的处理没有break 根跟就没跳出循环 所以就一直死在那里。 你根本就用不着在forech里再加while
lester19872007 2010-04-20
  • 打赏
  • 举报
回复
楼主的问题是虽然你用if (mingling == "stop") return;
判断了mingling是否等于stop 却没有给 mingling赋值,所以导致这个while成了死循环!!!
xqh369 2010-04-20
  • 打赏
  • 举报
回复
抱歉,各位,代码我没有给全,只是大致的代码上这样的。
mingling这个变量我肯定改变了的。
而且我设断点,当mingling=“stop” 代码是没有继续运行了。
所以我就搞不明白cpu占用率还是那么高
lester19872007 2010-04-20
  • 打赏
  • 举报
回复

while(mingling=="wait")
{
if (mingling == "stop") return; Thread.Sleep(1000);
}


你这代码有问题,首先你的mingling=="stop" ,改为 那么你在哪里给mingling=="stop"赋值的呢?
你需要这样改一下!


public void Start()
{
foreach (string str in keyList)
{
while(mingling=="wait")
{
if (mingling == "stop") return;
mingling="stop";
Thread.Sleep(1000);
}
Thread th = new Thread(new ParameterizedThreadStart(manThread));
th.IsBackground = true;
th.Start(str);
}
}
private void manThread(object key)
{
//业务处理
if (mingling == "stop") return;
}


110,571

社区成员

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

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

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