线程的重要问题 你这种使用方法有问题,你应该设置一个线程的开始条件以及结束条件,在你这种情况下,这个线程永远不会结束,而你的cpu处于空闲状态,它就会一直运行这个线程,所以cpu占用率一直就很高了,关于这方面的系统知识,你可以参考jeff richter的<<program application for microsoft windows>>,里面讲的非常详细 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加上 Sleep ,while(1){ i=1; Sleep(1);}好象你这是死循环 且不论是不是死循环,这样的线程确实很占用CPU时间。当然,它是不影响线程切换的,你在运行该线程的时候还是能点击其他窗口,如vc调试器,Explore,但是由于其他进程没有什么运行的请求,一旦CPU空闲,就会陷入到该线程的高速运算中。只能说该线程的CPU利用率是很高的。使用sleep或其他方法强制该线程放弃一定的时间片是一种解决方法。 WINDOWS是一个抢占式多任务系统,一个cpu渴求的线程能有较高的优先级(系统调度的),因此你的cpu时间当然是100了。 bigchief(bigchief):一个cpu渴求的线程能有较高的优先级(系统调度的)?不明白。 CPU时间片的单位时非常小的,我们作以下假设:系统中存在300个线程,每个线程每次调度的时间片为100。如果每个线程都设计优良,平均在每次调度的过程中占用时间片为2,则CPU占用率为2*300/(100*300)=2%,所有剩余出来的时间片都回被一个系统级的特殊线程(有人称之为零页线程)所使用;如果有一个线程设计的有缺陷(例如你的示例代码),则CPU的占用率为(2*99+100*1)/(2*99+100*1)=100%。基数为什么变小了呢?因为系统认为你的代码要执行任务,优先将别的线程空闲出来的时间片统统交给了你的线程,零页线程无从插足。也就是说,将系统内的所有线程调度一遍的总体时间已经变小了,其中的绝大多数时间均被不良线程所占用。当然系统的实现不是这么简单,并且NT与9x也略有不同,但大致就是这个样子的。 珠穆朗玛说得是!无论如何系统不能让CPU闲着而不给你运行啊. 呵呵,每一个人都说的很对。我补充一点,几乎所有的操作系统都不希望用户进程中的任何一个线程使用死循环,一般都采用同步机制进行处理。而采用同步机制就不用使CPU达到100%了。多线程的作用是保证你的进程在一个线程死循环的情况下还能够响应其他线程的请求。 多个线程读变量的问题 请问一下程序中不释放资源会怎么样? 将图片设为Windows桌面的API? MFC]怎么把一个对话框的Edit控件参数传递到另一个对话框中 那位老兄能否帮我编译一套VC++代码? 有什么控件可以包容多个子控件? 帮我看看这段代码怎么改? 高分:如何只打印View的一部分内容?(上一次已经加分了,分不够再加) “->m_nDrawType”的左边必须指向类/结构/联合/泛型类型的错误 在VC++中调用一个函数,其后的变量不能赋值??? NUXAS操作系统开发计划招募各路英雄好汉! 怎么样在一个类里调用另一个类的成员函数?
while(1)
{
i=1;
Sleep(1);
}好象你这是死循环
当然,它是不影响线程切换的,你在运行该线程的时候还是能点击其他窗口,
如vc调试器,Explore,但是由于其他进程没有什么运行的请求,
一旦CPU空闲,就会陷入到该线程的高速运算中。只能说该线程的CPU利用率
是很高的。使用sleep或其他方法强制该线程放弃一定的时间片是一种解决方法。
一个cpu渴求的线程能有较高的优先级(系统调度的)?
不明白。
我补充一点,几乎所有的操作系统都不希望用户进程中的任何一个线程使用死循环,一般都采用同步机制进行处理。而采用同步机制就不用使CPU达到100%了。多线程的作用是保证你的进程在一个线程死循环的情况下还能够响应其他线程的请求。