Thread.Sleep(0)与Thread.Sleep(1)的区别

hainang1234 2006-02-09 05:16:34
[MSDN对其参数的描述]
millisecondsTimeout
线程被阻塞的毫秒数。指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。指定 Infinite 以无限期阻塞线程。
------------------------------------------------------------------------
于是我这样子做:
while (!isQuit)
{
if (file.isHasData)
{
....//进行处理
}
else
{
Thread.Sleep(0);
}
}

我起初认为这样子做此循环便会在isHasData为false时此线程仅占用很少的CPU,因为它会主动放弃系统为其分配的时间片,但事实上运行过程中CPU使用率几乎一直保持100%。
然后我将Thread.Sleep(0)改成Thread.Sleep(1),一切便如我所想像,CPU利用率降下来了。

1)1毫秒引起的结果为什么差别会这么大呢?
2)请问我这么做可以吗?
...全文
934 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hainang1234 2006-02-13
  • 打赏
  • 举报
回复
to Sunmast(《.NET企业服务》翻译完毕):
可我不是用来实现线程同步目的,我只是想一直检测某一条件,比如一个ArrayList,如果有数据,做一定处理然后清空ArrayList。然后继续循环。

to lidong6(立冬):
呵,我也是像你这么考虑的。
lidong6 2006-02-11
  • 打赏
  • 举报
回复
的确是这样.我以前也遇到过这样的问题.

楼主可以这样算:
sleep(0)等于死循环,一秒可以执行多少次大概几万,几百万.没试过,但数字一定很大.
sleep(1)才1毫秒,但一秒最多执行1000次.
速马 2006-02-10
  • 打赏
  • 举报
回复
我推荐用WaitHandle实现线程同步,比如ManualResetEvent
aSalt 2006-02-09
  • 打赏
  • 举报
回复
sleep(1)要注意线程死锁问题, 0则不用考虑,如果只有一个线程访问你文件哈稀表,用sleep(1)吧
aSalt 2006-02-09
  • 打赏
  • 举报
回复
具体情况具体对待,没有上下文不好说啊~
单从你实验过的角度,当然可行了

110,534

社区成员

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

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

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