Требуется написать приложение, которое будет ограничивать загруженность процессора каким-то определенным процессом. Например, ограничить загрузку CPU процессом Excel.exe до 30% Хотелось бы услышать мнения людей о том, какие есть методики для достижения этого. Я знаю, есть программы, которые это делают, но как они работают, я не знаю. У меня пока есть одна мысль - периодически делать SuspendThread всем потокам процесса на несколько миллисекунд. Не думаю, что это лучший способ, хотя с точки зрения планировщика он ничуть не хуже других. У кого есть какие мысли?
Забыл сказать. Всё это дело нужно для Windows 2003, там есть встроенный Resource Manager, но есть ли там Resource Management API?
Неуверен. Помоему задачи такое позволяют (по крайнем мере квант времени выделять). Делать SuspendThread потокам - довольно плохая идея. Заморозить все потоки процеса в один миг не возможно. Следовательно на некоторых прогах это даст Fatal Error, в основном такие проблеммы с музыкой и игрушками.
semen Resource Manager Вот скачаю и посмотрю что он такое позволяет делать. DelExe Помоему задачи такое позволяют (по крайнем мере квант времени выделять). Можно подробнее? Думаю, если процессор в системе один, то отложить переключение на задачу из другой задачи с помощью SuspendThread на несколько миллисекунд можно. А вот если процессоров несколько... Придется еще определять как-то, что данный поток в данный момент не выполняется. __Dian Начальство захотело ограничить юзеров на сервере
а не проще, ли через start запускать программы с заниженым приорететом? в *nix'ах есть утилита nice которая занижает или завышает приоритет процессам, не знаю есть ли подобные утилы в виндах... я при большой загрузки сервера, понижаю приоритет процесса и все...
KiNDeR С приоритетами всё понятно, и скорее всего, Resource Manager с ними и играется (судя по эффективнсти работы). Приоритеты - темный лес в лапах Майкрософт, всё не так уж и очевидно. Да и как объяснить юзеру, что сегодня его прога работает с одной скоростью, а завтра из за загрузки сервера с другой. Да и юзеры бывают несознательные. Что больше займет процессорного времени - пятнадцать калькуляторов в low вычисляющих факториал 9999999 или один рассчет таблицы экселем в normal?
Если кому интерестно - в аттаче моя кривая версия ограничилки CPU для процесса. На однопроцессорной машине работает вполне безглючно даже на 3D игрушках 509790396__cpulimit.cpp
LocTb Но а дальше что? Job не ограничиает процессорное время автоматом, получается что придется опять-таки suspend'ить процесс (понижение приоритета не устраивает). Слишком часто suspend'ить потоки нельзя - при этом сам вызов Suspend/Resume занимает слишком много времени. А нельзя ли подобраться с помощью драйвера к внутренним структурам планировщика? Где бы про это почитать?