if (reader.is_lazy()) goto tldr;
У меня есть фоновый поток, который выполняет некоторые операции ввода-вывода с интенсивным фоновым типом. Чтобы угодить другим выполняющимся потокам и процессам, я установил приоритет потока в «фоновом режиме», используя 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 она полностью нарушит работу системы при использовании слишком большого количества операций ввода-вывода. У меня есть план для отвратительного и постыдного способа решения этой проблемы, но это зависит от того, смогу ли я определить, имеет ли текущий поток низкий приоритет ввода / вывода или нет.
Теперь я знаю, что могу сохранить, какой приоритет потока я в конечном итоге установил, но поток управления в программе не совсем подходит для этого. Я бы предпочел иметь возможность позже проверить, имеет ли текущий поток низкий приоритет ввода / вывода - находится ли он в «фоновом режиме».
tldr:
GetThreadPriority
, кажется, не дает мне эту информацию, он только дает приоритет процессора.
Есть ли способ определить, имеет ли текущий поток низкий приоритет ввода / вывода?