2008-12-26 12 views
11

Mam długi proces chrupania numerów, który wykorzystuje całkiem sporo poza-ekranowego renderowania OpenGL. Wszystko działa dobrze, ale kiedy zostawiam go do pracy na własną rękę, a ja pójdę zrobić kanapkę, zwykle stwierdzam, że rozbił się podczas mojej nieobecności.
Udało mi się ustalić, że awaria następuje bardzo blisko chwili Laptop, którego używam, decyduje się wyłączyć ekran, aby oszczędzać energię. Sama awaria znajduje się w bibliotekach NVIDIA, więc nie ma nadziei, aby wiedzieć, co się dzieje.Wyłącz wyświetlanie ekranu, gdy laptop wyłącza ekran?

Oczywistym rozwiązaniem jest wyłączenie funkcji zarządzania energią, która powoduje wyłączenie ekranu i karty graficznej, ale szukam czegoś bardziej przyjaznego dla użytkownika. Czy istnieje sposób, aby to zrobić programowo?
Wiem, że istnieje implementacja SETI @ home, która wykorzystuje procesor GPU. Jak sprawić, by karta wideo nie zasypiała?

+1

Po co to oznaczać? Wygląda jak ważne pytanie. +1, aby przeciwdziałać tchórzliwemu przejazdowi. –

Odpowiedz

9

Nie jestem pewien, na którym systemie operacyjnym jesteś, ale windows sends a message, że ma zamiar wprowadzić nowy stan zasilania. Możesz tego posłuchać, a następnie albo rozpocząć przetwarzanie na procesorze, albo odrzucić żądanie przejścia do stanu niższej mocy.

+0

Tak, okna. bardzo fajne, dzięki! – shoosh

8

Dla dobra użytkowników Linuksa napotykających podobny problem, pomyślałem, że dodam, że można uzyskać podobne powiadomienia i wstrzymać zmiany stanu zasilania za pomocą DBUS API. Przykładowy skrypt w Pythonie, zaczerpnięte z linkiem, aby zahamować zmiany stanu zasilania:

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

Zgodnie z MSDN, istnieje API, który umożliwia aplikację do opowiedzenia systemu Windows, że nadal działa i że system Windows nie powinien iść spać lub wyłączyć wyświetlacz. Ta funkcja nazywa się SetThreadExecutionState (MSDN). Działa to dla mnie, używając flag ES_SYSTEM_REQUIRED i ES_CONTINUOUS.

Należy jednak pamiętać, że korzystanie z tej funkcji nie zatrzymuje uruchamiania wygaszacza ekranu, co może zakłócać działanie aplikacji OpenGL, jeśli wygaszacz ekranu korzysta również z OpenGL (oder Direct3D).

+0

Wyłączenie wyświetlacza * nie * jest takie samo jak aktywacja wygaszacza ekranu. To są dwa niezależne ustawienia. -1 – 0xC0000022L