2008-12-26 161 views
11

我有一個冗長的數字運算過程,它利用了OpenGL離屏渲染的優勢。這一切運作良好,但是當我去做三明治的時候,當我離開它自己工作時,我通常會發現它在我不在的時候墜毀了。
我能夠確定崩潰發生的時刻非常接近我正在使用的筆記本電腦決定關閉屏幕以節約能源。崩潰本身就在NVIDIA dll內部,所以沒有希望知道發生了什麼。筆記本電腦關閉屏幕時的屏幕外顯示?

顯而易見的解決方案是關閉電源管理功能,將屏幕和視頻卡關閉,但我正在尋找更方便用戶的東西。 有沒有辦法做到這一點編程?
我知道有一個SETI @ home實現可以利用GPU處理。它如何保持顯卡不進入休眠狀態?

+1

爲什麼要標記這個?看起來像一個有效的問題。 +1來抵消懦弱的驅車。 – 2008-12-26 20:30:31

回答

9

我不確定你在使用什麼操作系統,但windows sends a message它即將進入新的電源狀態。您可以監聽它,然後開始在CPU上處理或拒絕請求進入低功耗狀態。

+0

是的,窗戶。非常酷,謝謝! – shoosh 2008-12-26 21:08:59

8

對於遇到類似問題的Linux用戶,我想補充一點,您可以使用DBUS API獲得類似通知並禁止電源狀態更改。在Python中的一個示例腳本,從鏈接採取抑制電源狀態變化:

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

根據MSDN,有一個允許應用程序告訴Windows它仍在工作,該Windows不是應該去一個API睡覺或關閉顯示器。

該功能被稱爲SetThreadExecutionStateMSDN)。它適用於我,使用標誌ES_SYSTEM_REQUIREDES_CONTINUOUS

但是,請注意,使用此功能不會停止運行屏幕保護程序,如果屏幕保護程序也使用OpenGL(或Direct3D),這可能會干擾您的OpenGL應用程序。

+0

關閉顯示器*與啓動屏幕保護程序不同。這是兩個獨立的設置。 -1 – 0xC0000022L 2012-10-03 12:58:10