Всем доброго времени суток. У меня в драйвере есть список со строками. При сканировании внутри списка может серьёзно возрастать загрузка процессора (что неудивительно). Попытался воспользоваться KeDelayExecutionThread- всё подвисает. Есль ли "хорошие" способы уменьшения загрузки процессора при сканировании внутри списка в драйвере?
KeWaitForSingleObject точно "спит" пока таймер или событие не сработает. А насчет KeDelayExecutionThread я лично в этом не уверен - чета попробовав сделать с ней то же самое, что раньше благополучно делал с KeWaitForSingleObject, получил какие-то глюки непонятные... Да, кстати, можно же сделать приоритет потока небольшим(LOW_PRIORITY, если не ошибаюсь).
Загрузка процессора всегда 100%. Если надо, что бы таскменеджер показывал на процесс System - см.PsCreateSystemThread. Хотя проще вручную отдавать кванты как советует cresta.
можно ли сделать так, чтобы процесс занимал не более n(+-5) процентов CPU, даже если остальное достанется idle?
Если процессор нагружается неким циклом достаточно большого количества проходов, то можно запустить таймер, и по каждому кванту таймера выполнять небольшую часть от общего количества проходов цикла.
Количество времени которое достаётся треду можно узнать из NtQueryInformationThread с параметром ThreadTimes. Если его достается слишком много - отдавать системе.