Frage

Ich habe einen langwierigen Prozess zur Berechnung von Zahlen, der einen Großteil der OpenGL-Offscreen-Rendering-Funktion nutzt.Es funktioniert alles gut, aber wenn ich es alleine arbeiten lasse, während ich ein Sandwich mache, stelle ich normalerweise fest, dass es während meiner Abwesenheit abstürzt.
Ich konnte feststellen, dass der Absturz sehr genau in dem Moment auftritt, in dem der Laptop, den ich verwende, beschließt, den Bildschirm auszuschalten, um Energie zu sparen.Der Absturz selbst ist in den NVIDIA-DLLs versteckt, sodass es keine Hoffnung gibt, herauszufinden, was los ist.

Die offensichtliche Lösung besteht darin, die Energieverwaltungsfunktion zu deaktivieren, die den Bildschirm und die Grafikkarte ausschaltet, aber ich suche nach einer benutzerfreundlicheren Lösung.Gibt es eine Möglichkeit, dies programmatisch zu tun?
Ich weiß, dass es eine SETI@home-Implementierung gibt, die die GPU-Verarbeitung nutzt.Wie verhindert es, dass die Grafikkarte in den Ruhezustand wechselt?

War es hilfreich?

Lösung

Ich bin nicht sicher, welches Betriebssystem Sie verwenden, aber Windows sendet eine Nachricht dass es im Begriff ist, in einen neuen Leistungszustand einzutreten.Sie können darauf warten und dann entweder mit der Verarbeitung auf der CPU beginnen oder die Anforderung, in einen Zustand mit geringerer Leistung zu wechseln, ablehnen.

Andere Tipps

Zum Nutzen von Linux -Benutzern, die auf ein ähnliches Problem stoßen, dachte ich, ich würde hinzufügen, dass Sie ähnliche Benachrichtigungen erhalten und die Änderungen des Leistungszustands mithilfe der Änderungen des Leistungszustands hemmen können Dbus api. Ein Beispiel -Skript in Python, das aus dem Link entnommen wurde, um die Änderung des Machtzustands zu hemmen:

#!/usr/bin/python
import dbus
import time
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
devobj = bus.get_object('org.freedesktop.PowerManagement', 
                        '/org/freedesktop/PowerManagement')
dev = dbus.Interface (devobj, "org.freedesktop.PowerManagement.Inhibit")
cookie = dev.Inhibit('Nautilus', 'Copying files from /media/SANVOL')
time.sleep(10)
dev.UnInhibit(cookie)

Laut MSDN gibt es eine API, mit der eine Anwendung Windows mitteilt, dass sie noch funktioniert und dass Windows nicht schlafen oder das Display ausschalten sollte.

Die Funktion heißt SetThreadExecutionState (Msdn). Es funktioniert für mich mit den Flags ES_SYSTEM_REQUIRED und ES_CONTINUOUS.

Beachten Sie jedoch, dass die Verwendung dieser Funktion den Bildschirmschoner nicht zum Ausführen hindert, was Ihre OpenGL -App stört, wenn der Bildschirmschoner auch OpenGL (ODER Direct3D) verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top