11

我有一个冗长的数字运算过程,它利用了相当多的 OpenGL 离屏渲染。这一切都很好,但是当我在做三明治的时候让它自己工作时,我通常会发现它在我不在的时候崩溃了。
我能够确定崩溃发生的时间非常接近我正在使用的笔记本电脑决定关闭屏幕以节省能源。崩溃本身就在 NVIDIA dll 中,所以没有希望知道发生了什么。

显而易见的解决方案是关闭关闭屏幕和视频卡的电源管理功能,但我正在寻找更用户友好的东西。有没有办法以编程方式做到这一点?
我知道有一个利用 GPU 处理的 SETI@home 实现。它如何防止视频卡进入睡眠状态?

4

3 回答 3

9

我不确定您使用的是什么操作系统,但Windows 会发送一条消息,表明它即将进入新的电源状态。您可以对此进行侦听,然后开始在 CPU 上进行处理或拒绝进入低功耗状态的请求。

于 2008-12-26T20:35:50.617 回答
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)
于 2008-12-26T21:20:49.140 回答
0

根据 MSDN,有一个 API 允许应用程序告诉 Windows 它仍在工作,并且 Windows 不应该进入睡眠状态或关闭显示。

该函数称为SetThreadExecutionState( MSDN )。它对我有用,使用标志ES_SYSTEM_REQUIREDES_CONTINUOUS.

但是请注意,使用此功能不会停止屏幕保护程序的运行,如果屏幕保护程序也使用 OpenGL(或 Direct3D),这可能会干扰您的 OpenGL 应用程序。

于 2010-02-02T13:07:56.503 回答