微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在SleepEx期间,CPU使用率不会下降

如何解决在SleepEx期间,CPU使用率不会下降

| 我的程序是幻灯片。它在具有其他进程的计算机上运行,​​因此,在等待显示下一张幻灯片时,我将其称为SleepEx(N,false),期望它将使用的cpu数量减少到接近零(N在100ms和5000ms)。在我开发的XP Pro计算机上,确实如此,但是在客户的XP Home计算机上,它在SleepEx()期间注册了30-80%的cpu。该代码一个单线程,因此在调用SleepEX()时无论使用了什么cpu。有没有人见过这个?     

解决方法

哪个进程占用了所有CPU?如果您使用调试器进入该过程-在堆栈跟踪中花费的时间在哪里? 当进程达到该CPU峰值时,请尝试使用ProcDump创建该进程的转储。然后分析堆栈跟踪以查看其卡住的位置。多次执行此操作,就可以很好地了解其花费时间。     ,我以前看过您阻止主窗口消息处理线程。 如果它具有主窗口消息处理功能,则不应将Sleep()函数放在单线程应用程序中。窗口应用程序应始终处理窗口消息而没有明显的延迟,否则,它将至少对应用程序造成死锁。 后果取决于Windows平台,编译器设置和CPU配置,通常在调试模式下的应用程序具有临时解决方法。但是,如果您使用发行版设置启动此类应用程序,则该应用程序可能会消耗一个具有功能的CPU核心,从而阻塞了其主窗口消息处理线程。 MSDN Sleep()函数说明中的“备注”部分清楚地说明了这种情况。 您只需要创建新线程,即可在此处使用Sleep()函数以允许窗口消息在主线程中自由流动。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。