是否可以通过外部强制让进程休眠?

是否可以通过外部强制让进程休眠?

假设我们有一个游戏通过其全局循环运行 100% 的 CPU 时间。但是,我们需要在外部“休眠()”其主进程,以便降低 CPU 时间。

我们无法访问它的来源。

有可能吗?在 Windows 上。

我更喜欢不涉及注入二进制文件的方法,因为注入二进制文件通常是非法的。

答案1

无需注入,您从外部可以做的最好的事情就是降低进程优先级,例如将其设置为空闲(您可以从任务管理器执行此操作)。如果您这样做,该进程仍将占用 100%,但仅当没有其他进程想要使用 CPU 时才会占用。

其他一些可能对您有帮助的工具(仅基于它们的描述,我没有尝试过)是优先权或者进程驯服器

答案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);
    }

相关内容