假设我们有一个游戏通过其全局循环运行 100% 的 CPU 时间。但是,我们需要在外部“休眠()”其主进程,以便降低 CPU 时间。
我们无法访问它的来源。
有可能吗?在 Windows 上。
我更喜欢不涉及注入二进制文件的方法,因为注入二进制文件通常是非法的。
答案1
答案2
您可以NtSuspendProcess
循环调用,暂停它 450 毫秒,然后恢复它 50 毫秒。我对此进行的实验似乎没有明显的副作用。当进程进入前台时,我会禁用此循环。
Java 示例:
boolean inForeground = false;
for(;;) {
updateProcesses(); // updates list of handles to throttle
if(!inForeground) {
for(HANDLE handle : handles.values()) {
NtDll.INSTANCE.NtSuspendProcess(handle);
}
}
Thread.sleep(480);
int foregroundPid = getForegroundPid();
inForeground = false;
for(Map.Entry<Integer, HANDLE> entry : handles.entrySet()) {
NtDll.INSTANCE.NtResumeProcess(entry.getValue());
if(entry.getKey() == foregroundPid) {
inForeground = true;
}
}
Thread.sleep(20);
}