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 это полностью разрушит систему, используя слишком много I/O. У меня есть план для уродливого и позорного способа смягчения этой проблемы, но это зависит от того, насколько я способен определить, имеет ли текущий поток низкий приоритет ввода-вывода или нет.
Теперь я знаю, что могу сохранить приоритет нити, в котором я закончил настройку, но поток управления в программе не очень хорошо подходит для этого. Я бы предпочел, чтобы иметь возможность проверить позже, имеет ли текущий поток низкий приоритет ввода-вывода - если он находится в «фоновом режиме».
tldr:
GetThreadPriority
не кажется, чтобы дать мне эту информацию, она дает только приоритет процессора.
Есть ли способ определить, имеет ли текущий поток низкий приоритет ввода/вывода?
Как GetThreadPriority не работает? – Goz
@Goz: Он дает только приоритет ЦП. Я обновил вопрос, чтобы включить это. –
Я вижу ... интересный. – Goz