如何减慢Windows进程的速度?
我知道我需要挂钩QueryPerformanceCounter
但我接下来需要做什么?
需要Delphi或C ++的帮助
答案 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在内部流程管理上引入了一个新层,允许在一个或多个流程上设置额外限制:作业。我不确定它是否允许设置对使用的处理器时间的限制,但如果应用程序尚未使用该方法,您可能只能调用AssignProcessToJobObject和SetInformationJobObject来强加额外的限制。