【发布时间】:2014-02-03 00:53:26
【问题描述】:
我有一个应用程序执行大量 CPU 和 I/O 繁重的工作。在完成这项工作时,它不应干扰其他应用程序。
例如,如果另一个应用程序正在充分利用我的应用程序正在读取的磁盘,我希望我的应用程序将其磁盘访问限制在非常低的速度,以免干扰其他应用程序。 CPU也是如此。例如,如果另一个应用程序正在编码视频,我不想从中窃取很多周期。
我尝试将我的线程置于后台模式,但我发现这些线程不会使用未使用的资源。在没有其他应用程序运行且几乎没有 CPU 或磁盘使用的情况下,在普通优先级线程上需要 1 秒的操作在后台线程上最多需要 5 分钟。
winapi 是否提供任何帮助我解决此问题的方法?
下面是我的应用程序磁盘使用情况的图片,而后台线程尝试计算 800 MB 文件的 SHA1 哈希值。如您所见,它几乎没有使用我的磁盘。在正常优先级下,它维持 20 MB+ 的读取。
编辑:澄清一下,“后台线程”是指优先级设置为后台模式的线程,而不是 C# 后台线程。
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
【问题讨论】:
标签: c windows winapi throttling