2008-12-26 15 views
11

Tengo un largo proceso de generación de números que aprovecha bastante la renderización fuera de la pantalla de OpenGL. Todo funciona bien, pero cuando lo dejo para trabajar solo mientras voy a hacer un sándwich, normalmente me daría cuenta de que se colgó mientras yo estaba fuera.
Pude determinar que el bloqueo se produce muy cerca del momento. La computadora portátil que estoy utilizando decide apagar la pantalla para ahorrar energía. El bloqueo en sí está dentro de los dlls de NVIDIA, por lo que no hay esperanzas de saber qué está pasando.¿Representación fuera de pantalla cuando la computadora portátil apaga la pantalla?

La solución obvia es desactivar la función de administración de energía que apaga la pantalla y la tarjeta de video, pero estoy buscando algo más fácil de usar. ¿Hay alguna manera de hacer esto programáticamente?
Sé que hay una implementación de SETI @ home que aprovecha el procesamiento de la GPU. ¿Cómo evita que la tarjeta de video se vaya a dormir?

+1

¿Por qué marcar esto? Parece una pregunta válida. +1 para contrarrestar el paso cobarde. –

Respuesta

9

No estoy seguro de qué sistema operativo está, pero windows sends a message que está a punto de ingresar a un nuevo estado de energía. Puede escuchar eso y luego comenzar el procesamiento en la CPU o denegar la solicitud para ingresar a un estado de menor consumo.

+0

Sí, ventanas. muy bueno, gracias! – shoosh

8

Para beneficio de los usuarios de Linux que enfrentan un problema similar, pensé que podría agregar que, puede obtener notificaciones similares e inhibir los cambios de estado de energía con el DBUS API. Un ejemplo de script en Python, tomada desde el enlace, para inhibir el cambio de estado de energía:

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

Según MSDN, hay una API que permite que una aplicación para que Windows todavía está trabajando y que Windows no debe ir para dormir o apagar la pantalla.

La función se llama SetThreadExecutionState (MSDN). Funciona para mí, usando los indicadores ES_SYSTEM_REQUIRED y ES_CONTINUOUS.

Tenga en cuenta, sin embargo, que el uso de esta función no detiene la ejecución del protector de pantalla, lo que podría interferir con su aplicación OpenGL si el protector de pantalla también utiliza OpenGL (o Direct3D).

+0

Apagar la pantalla * no * es lo mismo que activar el protector de pantalla. Esas son dos configuraciones independientes. -1 – 0xC0000022L

Cuestiones relacionadas