if (reader.is_lazy()) goto tldr;
我有一个后台线程,执行一些I/O密集型的后台任务。为了让其他线程和进程运行更加顺畅,我使用SetThreadPriority
将线程优先级设置为“后台模式”,如下所示:
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
然而,THREAD_MODE_BACKGROUND_BEGIN
只在 Windows Server 2008 或更高版本以及 Windows Vista 和更高版本中可用,但该程序需要在 Windows Server 2003 和 XP 上正常工作。因此,实际代码更像这样:
if (!SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN)) {
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
}
这样做的问题是,在Windows XP上,它会通过使用过多的I/O来完全破坏系统。我有一个计划来减轻这个问题,但这取决于我能否确定当前线程是否具有低I/O优先级。
现在,我知道我可以存储我最终设置的线程优先级,但程序的控制流不太适合这种方法。我更希望能够稍后测试当前线程是否具有低I/O优先级--即是否处于“后台模式”。
tldr:
GetThreadPriority
似乎不能提供此信息,它只提供了 CPU 优先级。有没有办法确定当前线程是否具有低 I/O 优先级?