Замедлить процесс Windows? - PullRequest
       1

Замедлить процесс Windows?

0 голосов
/ 30 октября 2010

Как я могу замедлить процесс Windows?

Я понимаю, что мне нужно перехватить QueryPerformanceCounter но что мне нужно делать дальше?

Нужна помощь для Delphi или C ++

Ответы [ 4 ]

3 голосов
/ 30 октября 2010

Я не уверен, что понимаю связь перехвата QueryPerformanceCounter с замедлением описанного вами процесса. Возможно, если вы уточните исходный вопрос или комментарий, я могу помочь вам в дальнейшем.

Чтобы ответить на ваш вопрос, вы можете использовать cpustres.exe из набора ресурсов Windows 2000, чтобы загрузить вашу систему, вызывая переключение контекста. Если вы загрузите достаточную нагрузку и перепишете все доступные процессоры, вы замедлите свой процесс. В зависимости от уровня нагрузки, выбранного вами в настройках cpustres, вы можете сильно или немного замедлить процесс.

Если вы хотите программно замедлить процесс более контролируемым образом, не прерывая его, если это игра, вы можете использовать ответ Касабланки, но заменить Sleep (10) на:

// Turn off optimizations to make sure the busy wait loops do
// not get optimized out!

HANDLE hThread = ...; // thread that you want to slow down 
for (;;) { 
  SuspendThread(hThread); // Do this for each process thread

  // Busy wait for pause (possibly small)
  const DWORDLONG pauseFactor=1000; // In cycles
  DWORDLONG start=__rdtsc();

  while (__rdtsc()-start<pauseFactor)
    ;  

  ResumeThread(hThread); // Do this for each process thread

  // Busy wait for resume
  const DWORDLONG runFactor=1000; // In cycles
  DWORDLONG start=__rdtsc();

  while (__rdtsc()-start<runFactor)
    ;  
} 
1 голос
/ 30 октября 2010

Один из способов, который я могу придумать, - это использовать выделенный поток SuspendThread в потоке, который вы хотите замедлить, подождите немного и затем возобновите поток:

HANDLE hThread = ...; // thread that you want to slow down
for (;;) {
  SuspendThread(hThread);
  Sleep(10); // some number of milliseconds - larger values will slow down more
  ResumeThread(hThread);
}
0 голосов
/ 31 октября 2010

В Windows 2000 появился новый уровень поверх внутреннего управления процессами, который позволяет устанавливать дополнительные ограничения для одного или нескольких процессов: задания. Я не уверен, что позволяет установить ограничение на используемое время процессора, но если приложение еще не использует метод, вы можете просто вызвать AssignProcessToJobObject и SetInformationJobObject наложить дополнительные ограничения.

0 голосов
/ 30 октября 2010

Я не понимаю, что является причиной / фоном вашего вопроса, так как вы не объяснили это четко.Однако, используя <a href="http://msdn.microsoft.com/en-us/library/ms686219%28VS.85%29.aspx" rel="nofollow noreferrer">SetPriorityClass()</a>, вы можете установить класс приоритета для указанного процесса на BELOW_NORMAL_PRIORITY_CLASS или даже на IDLE_PRIORITY_CLASS, чтобы процесс работал медленнее;и вы также можете установить класс приоритета для указанного процесса на ABOVE_NORMAL_PRIORITY_CLASS или даже на HIGH_PRIORITY_CLASS, чтобы процесс работал быстрее.Прежде чем сделать это, вам нужно получить дескриптор целевого процесса по его PID, посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...