Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2019, 01:09   #1
Max_t
 
Регистрация: 18.02.2019
Сообщений: 7
По умолчанию Можно ли отложить вход в спящий режим из службы Windows

Еще одна проблема с сервером, который некорректно отслеживает закрытие соединения. Сокет на устройстве, к которому происходит подключение, перестает отвечать на запросы, если была попытка закрыть соединение при обрыве связи по сети. Изменить поведение устройства возможности нет.
http://programmersforum.ru/showthread.php?t=326798
Код:
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
        {            
            if (powerStatus.HasFlag(PowerBroadcastStatus.QuerySuspend))
            {                
                StopThreads();                
            }           
            if (powerStatus.HasFlag(PowerBroadcastStatus.ResumeSuspend))
            {
                StartThreads();
            }
            return base.OnPowerEvent(powerStatus);
        }
Пытаюсь использовать функцию SetThreadExecutionState.
https://stackoverflow.com/questions/...racefully-when
Код:
SetThreadExecutionState(EXECUTION_STATE.ES_AWAYMODE_REQUIRED |
EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED |
EXECUTION_STATE.ES_CONTINUOUS);
Она работает только, если вызвать ее до входа в спящий режим, и частично блокирует вход в спящий режим. Гаснет монитор, но не закрываются сетевые соединения. Метод OnPowerEvent в этом случае не получает сообщений о входе в спящий режим и выходе из него. Если вызвать функцию SetThreadExecutionState после получения сообщения QuerySuspend, она не блокирует вход в спящий режим. Кроме того, сообщалось, что функция SetThreadExecutionState не работает на Windows 10. Есть ли способ не блокировать, а отложить вход в спящий режим на несколько секунд, и не до, а после сообщения QuerySuspend, чтобы служба успела корректно закрыть соединение?
Другой вариант - можно ли сделать так, чтобы служба не пыталась закрыть соединение при входе в спящий режим. Если не закрывать соединение при обрыве связи, связь затем восстанавливается. Если во время обрыва связи была попытка закрытия соединения или был выход из приложения, сокет после восстановления связи не отвечает на запросы. В приложении, которое вводит компьютер в спящий режим, можно предусмотреть, чтобы оно сообщало службе об этом за несколько секунд до входа в спящий режим. Но есть ли способ сделать это средствами самой службы?
Max_t вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как принудительно в спящий режим Win XP? beegl Общие вопросы Delphi 2 26.11.2018 18:02
где можно почитать про службы Windows, чтоб было доходчиво и понятно?) vasypu C# (си шарп) 1 12.09.2018 23:22
(не)Спящий режим Дmmm Windows 4 08.04.2015 12:44
Спящий режим ололошенько Помощь студентам 21 10.09.2013 18:47
Тормозит спящий режим Arigato Операционные системы общие вопросы 28 31.10.2010 11:27