Подтвердить что ты не робот

Выключение экрана при выключении экрана ноутбуком?

У меня есть длительный процесс хрустания числа, который использует довольно неплохую визуализацию OpenGL. Все работает хорошо, но когда я оставляю его работать самостоятельно, пока я иду, сделаю бутерброд, я обычно обнаруживаю, что он разбился, когда я отсутствовал.
Я смог определить, что авария происходит очень близко к моменту. Ноутбук, который я использую, решает отключить экран, чтобы сэкономить энергию. Сама авария находится внутри библиотек NVIDIA, поэтому нет никакой надежды узнать, что происходит.

Очевидным решением является отключить функцию управления питанием, которая отключает экран и видеокарту, но я ищу что-то более удобное для пользователя. Есть ли способ сделать это программно?
Я знаю, что есть реализация SETI @home, которая использует преимущества обработки GPU. Как сохранить видеокарту от сна?

4b9b3361

Ответ 1

Я не уверен, в какой ОС вы находитесь, но окна отправляют сообщение, что он собирается ввести новое состояние питания. Вы можете слушать это, а затем либо начать обработку на процессоре, либо отклонить запрос, чтобы войти в состояние с более низким энергопотреблением.

Ответ 2

В интересах пользователей Linux, сталкивающихся с подобной проблемой, я думал, что добавлю, что вы можете получать похожие уведомления и блокировать изменения состояния питания с помощью DBUS API. Пример script в 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

В соответствии с MSDN существует API, который позволяет приложению сообщать Windows, что он все еще работает, и что Windows не должна переходить в режим сна или отключать отображение.

Функция называется SetThreadExecutionState (MSDN). Он работает для меня, используя флаги ES_SYSTEM_REQUIRED и ES_CONTINUOUS.

Обратите внимание, однако, что использование этой функции не останавливает запуск экранной заставки, что может помешать вашему OpenGL-приложению, если экранная заставка также использует OpenGL (или Direct3D).