Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Функция перегрузки ПК стала работать с переменным успехом / 14 сообщений из 14, страница 1 из 1
23.06.2018, 14:18
    #39664617
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Доброе время суток форумчане,
На протяжении полугода пользовался функцией для перегрузки ПК, проблем не возникало.
Но вот уже около недели, программа с этой функцией выдает фиртеля. Т.е. есть случаи, когда программе удается перегрузить ПК, а бывают случаи, когда с системы выгражаются программы, а перезагрузки ПК нет.
До этого не доставлял никаких программ.

Функция:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
function TFMain.MyExitWindows(RebootParam: Longword): Boolean;
var  
  TTokenHd: THandle;  
  TTokenPvg: TTokenPrivileges;  
  cbtpPrevious: DWORD;
  rTTokenPvg: TTokenPrivileges;
  pcbtpPreviousRequired: DWORD;  
  tpResult: Boolean;  
const  
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';  
begin  
  if Win32Platform = VER_PLATFORM_WIN32_NT then  
  begin  
    tpResult := OpenProcessToken(GetCurrentProcess(),
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,  
      TTokenHd);  
    if tpResult then  
    begin  
      tpResult := LookupPrivilegeValue(nil,  
                                       SE_SHUTDOWN_NAME,  
                                       TTokenPvg.Privileges[0].Luid);  
      TTokenPvg.PrivilegeCount := 1;  
      TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;  
      cbtpPrevious := SizeOf(rTTokenPvg);  
      pcbtpPreviousRequired := 0;  
      if tpResult then  
        Windows.AdjustTokenPrivileges(TTokenHd,  
                                      False,
                                      TTokenPvg,  
                                      cbtpPrevious, 
                                      rTTokenPvg, 
                                      pcbtpPreviousRequired); 
    end;
  end;
  Result := ExitWindowsEx(RebootParam, 0);
end;



Ее вызов:
Код: pascal
1.
MyExitWindows(EWX_REBOOT or EWX_FORCE);



В чем может быть закавыка?

Заранее спасибо за ответ

P.S.
- ОС: Windows10
...
Рейтинг: 0 / 0
23.06.2018, 15:52
    #39664635
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Sergey-2008В чем может быть закавыка?

В том, что tpResult проверяется только на успех, а ошибки тупо игнорируются?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.06.2018, 16:11
    #39664636
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Dimitry Sibiryakov,

а может быть проще поступить
Код: pascal
1.
WinExec('shutdown /r /f /t 0', SW_HIDE);



и все? Мне в этом случае "всякие нежности" не нужны.
...
Рейтинг: 0 / 0
23.06.2018, 16:19
    #39664639
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
дело в том, что процесс, который я не контроллирую, греет очень видиокарту, и его на долго прерывать нельзя.
А температуру видео, я могу контроллировать. и при допустим свыше 74 градусов, я ничего больше не придумал, как перезагружать ПК.
...
Рейтинг: 0 / 0
23.06.2018, 16:22
    #39664641
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Dimitry SibiryakovSergey-2008В чем может быть закавыка?

В том, что tpResult проверяется только на успех, а ошибки тупо игнорируются?..


Да это я как-то пропустил. Спасибо. Буду смотреть...
...
Рейтинг: 0 / 0
23.06.2018, 16:24
    #39664642
Функция перегрузки ПК стала работать с переменным успехом
А перезагрузка это не "на долго"? И разве он при этом как раз не прервётся? :3
Ну так контролируйте тот процесс, кто вам запрещает?
...
Рейтинг: 0 / 0
23.06.2018, 17:17
    #39664656
Лернсер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Можно отправить компьютер в гибернацию

Код: pascal
1.
rundll32.exe Powrprof.dll,SetSuspendState 1



И в планировщик задач добавить проснутся через время
...
Рейтинг: 0 / 0
23.06.2018, 19:15
    #39664686
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Sergey-2008дело в том, что процесс, который я не контроллирую, греет очень видиокарту, и его на долго прерывать нельзя.
А температуру видео, я могу контроллировать. и при допустим свыше 74 градусов, я ничего больше не придумал, как перезагружать ПК.
А не проще прибить процесс и после "остывания" видеокарты запустить заново?
...
Рейтинг: 0 / 0
23.06.2018, 19:41
    #39664695
Функция перегрузки ПК стала работать с переменным успехом
А не проще SuspendThread() / ResumeThread() ?
...
Рейтинг: 0 / 0
23.06.2018, 20:07
    #39664701
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
МолотоглавА не проще SuspendThread() / ResumeThread() ?Не проще https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686345(v=vs.85).aspx This function is primarily designed for use by debuggers. It is not intended to be used for thread synchronization. Calling SuspendThread on a thread that owns a synchronization object, such as a mutex or critical section, can lead to a deadlock if the calling thread tries to obtain a synchronization object owned by a suspended thread. To avoid this situation, a thread within an application that is not a debugger should signal the other thread to suspend itself. The target thread must be designed to watch for this signal and respond appropriately.
...
Рейтинг: 0 / 0
23.06.2018, 23:30
    #39664751
Функция перегрузки ПК стала работать с переменным успехом
Переводчик GoogleЭта функция в основном предназначена для использования отладчиками. Он не предназначен для синхронизации потоков. Вызов SuspendThread в потоке, который владеет объектом синхронизации, например мьютексом или критическим сектором, может привести к тупиковой ситуации, если вызывающий поток пытается получить объект синхронизации, принадлежащий приостановленному потоку. Чтобы избежать этой ситуации, поток в приложении, который не является отладчиком, должен сигнализировать о том, что другой поток приостанавливается. Целевая нить должна быть спроектирована так, чтобы следить за этим сигналом и реагировать соответствующим образом.
"не предназначен для синхронизации потоков" - мы и не синхронизируем.
"вызывающий поток пытается получить объект синхронизации, принадлежащий приостановленному потоку" - останавливаемый поток - чужой , мы при всём желании не сможем обладать его объекты .
Это предупреждение для потоков одного процесса.
...
Рейтинг: 0 / 0
25.06.2018, 09:43
    #39665079
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Sergey-2008,

SetPriorityClass() для процесса не решит проблему?
...
Рейтинг: 0 / 0
25.06.2018, 14:32
    #39665364
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция перегрузки ПК стала работать с переменным успехом
Молотоглавостанавливаемый поток - чужой ,И вместе с ним мы легко можем остановить все-тот-же чужой процесс. Или несколько чужих процессов, если используется межпроцессная синхронизация, о которой мы не подозреваем
...
Рейтинг: 0 / 0
25.06.2018, 21:32
    #39665596
Функция перегрузки ПК стала работать с переменным успехом
_Vasilisk_, ну вообще-то именно это и требуется ТС...
Приостановить чужой процесс. А если есть связанные/синхронизируемые с ним - их тоже приостановить.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Функция перегрузки ПК стала работать с переменным успехом / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]