首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

线程调度有关问题

2012-03-13 
线程调度问题我在主线程里通过CreateThread创建了第2个线程,第2个线程只有while(true){}这个死循环。结果发

线程调度问题
我在主线程里通过CreateThread创建了第2个线程,第2个线程只有
while(true)
{

}
这个死循环。结果发现第2个线程基本上把CPU都抢占了,其他进程基本上都响应不了鼠标键盘消息。搞不懂是什么原因。按道理,操作系统应该会轮转的调度各个线程,其他线程应该也分配到自己的时间片,所以应该能正常的响应鼠标键盘消息才正确啊。

[解决办法]
你电脑单核的吧?
[解决办法]
友情帮顶,友情帮顶
[解决办法]
会,不过写得好的线程都不会像你这么没事占所有剩余CPU
[解决办法]
看下孙鑫的C++视频
[解决办法]

探讨
引用:
会,不过写得好的线程都不会像你这么没事占所有剩余CPU


谢谢。只是不明白为什么其他线程都很难分到时间片。如果在while里面写个sleep(1),效果就会好很多,因为自己会放弃当前时间片。但我就是想搞明白不写sleep的话,其他线程为什么分不到时间片。

[解决办法]
简单说其他线程没事都会自己放弃时间片等用户输入网络IO等,而操作系统认为你的线程一直需要时间片,所以让你的线程占大部分CPU
[解决办法]
在主线程
while(TRUE)
{
}
然后你会发现主线程跟副线程各占50%.
而且你的cpu是单核的.
每个线程只能在某一个核心上运行.
[解决办法]
让你的线程休息一下 !呵呵
[解决办法]
因为别人都很谦虚
但是你得线程太霸道了
[解决办法]
肯定会是一个死循环撒,线程的运行是以时间片轮转的方式来执行的,由于时间特别短给人的感觉就是几个线程在并发执行。相信LZ在看多线程编程时应该注意到一个问题,就是在子线程函数里面都有一个Sleep函数,这就是为了让这个子线程交出CPU的控制权。你的子线程一个while(true)循环体里面啥都不做,那很显然,当轮到他执行时就会一直占用CPU,太霸道了吧。应该SLEEP下给人家个机会撒
[解决办法]
用Sleep(0)吧。至于为什么用0,自己去看看MSDN的文档。

热点排行