一个WHILE循环,里面会压缩文件,传输文件,解压文件,还一些逻辑操作,我怎么确定是哪块占CPU啊???CPU很高现在
解决方案 »
- 如何实现这个功能?
- 怎样使加到CListCtrl中的图标居中显示?
- SDK编程,为什么得到的字符串是乱码?
- 我用ado写了个基于对话框的程序,出现error runtime. 谢谢!!!
- 请教几个有关ToolBar的问题
- 请帮忙瞧瞧:嵌入的汇编代码出错?
- 急用!!!,如何删除某一目录下的所有文件
- 费尔个人防火墙 2.0 及源代码发布公告
- 怎样编程结束应用程序( CWnd()->DestroyWindow() 在非MFC类中出现非法操作 )
- 求教高手~请问哪位可以解释下glMultMatrix()
- 如何通过AfxGetApp发送消息到另一个单文档程序里的对话框
- CTabCtrl 的GetItem 出错
我在线程里再开线程跑占CPU的操作会起到作用吗???
得看有没有更好的算法
现在我在循环中加了Sleep(5); 怎么CPU没下来啊???
------------------------------------------------
Sleep(5)只是延时5毫秒,cpu下来你也感觉不到的。
Sleep()的参数是毫秒,要延时5秒得用Sleep(5000)
我知道Sleep是毫秒,可是延时太长会影响执行效率!
那有什么方法降下来吗?因为我调的是一个压缩的接口,压缩算法我是变不了了!从外部有什么方法可以降下来吗?
{
int i = 0;
while(1)
{
i++;
//Sleep(1);
}
}
如果没有那个Sleep(1),那么使用率100%,加上Sleep(1),CPU使用率0%,原因很简单,因为i++可能1us都不用,但Sleep(1)是1ms,差了好几个数量级,对于每一次循环,线程在Sleep的时间要远大于工作的时间,使用率自然降到0了。
如果把这里的i++换成func()这样的一个函数,如果执行func需要10us,那么CPU使用率依然是0%,但如果func需要100ms,毫无疑问CPU使用率必然飙到100%。
如果不知道func()需要多少时间,但要求CPU使用率不超过50%,那么可以这样:
{
while(1)
{
DWORD tm = ::GetTicketCount();
func();
tm = ::GetTicketCount() - tm;
Sleep(tm);
}
}
也就是执行多少时间,就休息多少时间……
只不过降低CPU的代价是要延长时间!