Dışarıdan zorla bir süreç uyuyabilir mi?


1

Diyelim ki küresel döngüsüyle% 100 cpu zamanı çalıştıran bir oyunumuz var. Bununla birlikte, cpu zamanını düşürmek için ana sürecini dışsal olarak 'uyumamız ()' gerekir.

Kaynağına erişimimiz yok.

Mümkün mü? Pencerelerde.

Genellikle yasadışı olan ikili enjekte edilmeyen yöntemleri tercih ederim.


Sen süreci askıya Process Explorer kullanabilirsiniz, ama @lel bekliyoruz aynı sonucu verecektir emin değilim
Sathyajith Bhat

Yanıtlar:


1

Enjeksiyon yapmadan dışarıdan yapabileceğiniz en iyi şey, işlem önceliğini düşürmektir, örneğin Boşta (bunu Görev Yöneticisinden yapabilirsiniz). Bunu yaparsanız, işlem hala% 100 alacaktır, ancak yalnızca başka hiçbir işlem CPU kullanmak istemediğinde.

Bu konuda size yardımcı olabilecek diğer bazı araçlar (yalnızca açıklamalarına dayanarak, denemedim) Prio veya Process Tamer .


0

NtSuspendProcessBir döngüde arayabilir , 450 msn için askıya alabilir ve 50 msn için devam ettirebilirsiniz. Benim açımdan bununla ilgili deneylerin belirgin bir yan etkisi olmadığı görülüyor. İşlem ön plana geldiğinde, bu döngüyü devre dışı bırakıyorum.

Java örneği:

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

Pinvoke.net: NtSuspendProcess (ntdll) demek mi istiyorsun ? Entegre bir kod pasajı kullanarak daha derin bir bilgi verebilir misiniz?
JosefZ

Örnek kod eklendi (Java'da, ntdll'e yapılan çağrıları yapmak için JNA kullanarak).
john16384
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.