笔记本电脑关闭屏幕时关闭屏幕渲染?
Posted
技术标签:
【中文标题】笔记本电脑关闭屏幕时关闭屏幕渲染?【英文标题】:Off screen rendering when laptop shuts screen down? 【发布时间】:2010-09-28 11:56:06 【问题描述】:我有一个冗长的数字运算过程,它利用了相当多的 OpenGL 离屏渲染。这一切都很好,但是当我在做三明治的时候让它自己工作时,我通常会发现它在我不在的时候崩溃了。 我能够确定崩溃发生的时间非常接近我正在使用的笔记本电脑决定关闭屏幕以节省能源。崩溃本身就在 NVIDIA dll 中,所以没有希望知道发生了什么。
显而易见的解决方案是关闭关闭屏幕和视频卡的电源管理功能,但我正在寻找更用户友好的东西。 有没有办法以编程方式做到这一点? 我知道有一个利用 GPU 处理的 SETI@home 实现。它是如何防止显卡进入休眠状态的?
【问题讨论】:
【参考方案1】:根据 MSDN,有一个 API 允许应用程序告诉 Windows 它仍在工作并且 Windows 不应进入睡眠状态或关闭显示器。
该函数被称为SetThreadExecutionState
(MSDN)。它适用于我,使用标志 ES_SYSTEM_REQUIRED
和 ES_CONTINUOUS
。
但是请注意,使用此功能不会停止屏幕保护程序的运行,如果屏幕保护程序也使用 OpenGL(或 Direct3D),这可能会干扰您的 OpenGL 应用程序。
【讨论】:
关闭显示器不与激活屏幕保护程序相同。这是两个独立的设置。 -1【参考方案2】:为了让遇到类似问题的 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)
【讨论】:
【参考方案3】:我不确定您使用的是什么操作系统,但windows sends a message 它即将进入新的电源状态。您可以对此进行侦听,然后开始在 CPU 上进行处理或拒绝进入低功耗状态的请求。
【讨论】:
以上是关于笔记本电脑关闭屏幕时关闭屏幕渲染?的主要内容,如果未能解决你的问题,请参考以下文章