Domanda

Ho un processo elaborazione di calcoli numerici lungo che sfrutta abbastanza abit di rendering OpenGL off-screen. Tutto funziona bene, ma quando lascio a lavorare da sola mentre io vado fare un panino Io di solito trovare che è caduto mentre ero via.
Sono stato in grado di determinare che l'incidente si verifica molto vicino al momento in cui il computer portatile sto usando decide di spegnere lo schermo per risparmiare energia. L'incidente in sé è ben dentro le DLL NVIDIA quindi non c'è speranza di sapere cosa sta succedendo.

La soluzione più ovvia è quella di disattivare la funzione di risparmio energetico che trasforma la scheda video e dello schermo spento, ma sto cercando qualcosa di più user friendly. C'è un modo per fare questo programatically?
So che c'è un'implementazione di SETI @ home, che si avvale di elaborazione della GPU. Come tenere la scheda video di andare a dormire?

È stato utile?

Soluzione

Non sono sicuro di quale sistema operativo si è in, ma le finestre invia una messaggio che è in procinto di entrare in un nuovo stato di alimentazione. È possibile ascoltare per questo e allora o avviare l'elaborazione della CPU o negare la richiesta di entrare in uno stato di risparmio energetico.

Altri suggerimenti

A beneficio degli utenti Linux che incontrano un problema simile, ho pensato di aggiungere che, è possibile ottenere le notifiche simili e di inibire i cambiamenti di stato di potenza utilizzando il dBUS API . Uno script di esempio in Python, preso dal collegamento, per inibire la modifica dello stato di potenza:

#!/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)

Secondo MSDN, v'è un'API che consente a un'applicazione di dire a Windows che sta ancora lavorando e che Windows non dovrebbe andare a dormire o disattivare la visualizzazione.

La funzione viene richiamata SetThreadExecutionState ( MSDN ). Funziona per me, utilizzando il ES_SYSTEM_REQUIRED bandiere e ES_CONTINUOUS.

Si noti, tuttavia, che l'utilizzo di questa funzione non interrompe lo screen saver esecuzione, che potrebbe interferire con la vostra OpenGL applicazione se lo screen saver utilizza anche OpenGL (oder Direct3D).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top