如何限制进程在Windows上的CPU使用率? (需要代码,而不是应用程
有些程序可以限制
Windows中进程的CPU使用率.例如
BES和
ThreadMaster.我需要编写自己的程序,它与这些程序具有相同的功能,但具有不同的配置功能.有人知道如何完成CPU限制进程(代码)吗?我不是在谈论设置进程的优先级,而是如何将其CPU使用率限制为例如15%,即使没有其他进程竞争CPU时间.
更新:我需要能够限制任何已经运行的进程以及我没有源代码访问权限. 解决方法
很简单,它可以像这样工作:
>使用一些合理的小等待时间(可能为100毫秒)创建一个定期的等待计时器.通过调用GetProcessTimes一次获取每个相关进程的“最后”值. >如果GetProcessAffinityMask返回0,则调用SetProcessAffinityMask(old_value).这意味着我们在上一次迭代中暂停了该过程,现在我们给它一个再次运行的机会. 这基本上是在内核中运行的调度程序的一个非常原始的版本,在userland中实现.如果它使用的CPU时间比你想象的要多,那么它会使进程“休眠”一小段时间.更复杂的测量可能会持续一秒或5秒(并且可能是可取的). 您可能想要暂停该进程中的所有线程.但是,除非你确切知道程序正在做什么,否则不要使用优先级并且不使用SuspendThread是很重要的,因为这很容易导致死锁和其他令人讨厌的副作用.例如,在另一个线程仍在运行并尝试获取同一对象时,暂停一个持有临界区的线程.或者想象你的进程在挂起十几个线程的过程中被换掉,剩下一半在运行,另一半在死. 另一方面,将关联掩码设置为零只意味着从现在开始,进程中没有任何单个线程在任何处理器上获得更多时间片.重置亲和力同时给予原子 – 所有线程都可以再次运行. 不幸的是,SetProcessAffinityMask不像SetThreadAffinityMask那样返回旧的掩码,至少根据文档.因此,需要额外的Get …调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用CMake生成的DLL和奇怪的重复模板的不正确行为(C)
- 为什么Windows给我的硬盘字母C而不是A或B?
- windows-server-2008 – Web应用程序的100%正常运行时间
- 在Windows上设置Java进程名称
- windows – 使用命令行从TortoiseSVN中的多个修订版创建补丁
- windows
- windows – “作为服务登录”实际上意味着什么?
- Windows Phone 8.1 Store VS Windows Phone 8.1 Silverligh
- .net – 错误:[Microsoft] [ODBC驱动程序管理器]未找到数据
- “无法找到指定的过程”错误与.NET 4
- Win8上透明Webview的库/解决方法?
- 在Windows 64x下的GCC中的printf和%llx
- Atitit webdav 的问题 -------------大文件传输问
- windows-7 – 我可以创建预激活的Windows 7映像
- windows-server-2012 – 计划任务未在Windows Se
- Windows的git-slave
- 如何软重启Windows Server 10 Technical Preview
- windows – 如何在没有确认的情况下从命令行删除
- 在哪里可以找到有关Microsoft未来Windows版本中C
- powershell – 如何使用批处理或vbscript向Windo