减慢Windows进程?

时间:2010-10-30 15:23:44

标签: c++ windows delphi process

如何减慢Windows进程的速度?

我知道我需要挂钩QueryPerformanceCounter但我接下来需要做什么?

需要Delphi或C ++的帮助

4 个答案:

答案 0 :(得分:3)

我不确定我是否理解将QueryPerformanceCounter挂钩以减慢您描述的进程的关系。也许如果您详细说明原始问题或评论,我可以进一步帮助您。

要回答您的问题,您可以使用Windows 2000资源工具包中的cpustres.exe来加载系统,从而导致上下文切换。如果您放置了足够的负载并超额预订所有可用的CPU,则会降低您的流程速度。根据您使用cpustres设置选择的负载级别,您可以减慢或稍微减慢您的流程。

如果您想以更加可控的方式以编程方式减慢进程,而不是在游戏中崩溃,您可以使用casablanca的答案,但将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 :(得分:1)

我能想到的一种方法是在你要减速的线程上使用专用线程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);
}

答案 2 :(得分:0)

我不明白你的问题的动机/背景是什么,因为你没有清楚地解释它。但是,使用SetPriorityClass(),您可以将指定进程的优先级设置为BELOW_NORMAL_PRIORITY_CLASS,甚至设置为IDLE_PRIORITY_CLASS,以使进程运行得更慢;您还可以将指定流程的优先级设置为ABOVE_NORMAL_PRIORITY_CLASS,甚至设置为HIGH_PRIORITY_CLASS,以便流程运行得更快。在此之前,您需要通过其PID来处理目标进程,查看here

答案 3 :(得分:0)

Windows 2000在内部流程管理上引入了一个新层,允许在一个或多个流程上设置额外限制:作业。我不确定它是否允许设置对使用的处理器时间的限制,但如果应用程序尚未使用该方法,您可能只能调用AssignProcessToJobObjectSetInformationJobObject来强加额外的限制。