opengl - solo - ¿Representación fuera de pantalla cuando la computadora portátil apaga la pantalla?
notebook no enciende (3)
No estoy seguro de en qué sistema operativo está, pero Windows envía un mensaje de 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.
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 uso 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.
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?
Para beneficio de los usuarios de Linux que enfrentan un problema similar, pensé que agregaría eso, puedes obtener notificaciones similares e inhibir los cambios de estado de energía usando la API de DBUS . Un script de ejemplo en Python, tomado del 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)
De acuerdo con MSDN, hay una API que permite que una aplicación le diga a Windows que todavía está funcionando y que Windows no debería quedarse dormido o apagar la pantalla.
La función se llama SetThreadExecutionState
( MSDN ). Funciona para mí, usando los indicadores ES_SYSTEM_REQUIRED
y ES_CONTINUOUS
.
Sin embargo, tenga en cuenta que el uso de esta función no detiene la ejecución del protector de pantalla, que podría interferir con su aplicación OpenGL si el protector de pantalla también usa OpenGL (o Direct3D).