![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Процесс находится в постоянном цикле с элементом Sleep(360000)
не дает выключить компьютор. Помогите простым примерчиком решить эту проблему. Может что-то такое http://forum.vingrad.ru/faq/topic-156310.html только на С++ |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
||||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
||||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Не знаю, как в винде, но, по идее, каждый процесс при выключении получает сигнал от операционной систему. Нужно его перехватить и выполнить break.
|
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
примерчик бы хотелось. Перехвата процессом без окна |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: нет Всего: 97 |
В смысле? По идее, обычные С++ исключения. Наличие окна не влияет на получение сигнала. Просто надо знать, какие исключения ловить. Я с Windows API не знаком, но из того, что видел, вам нужно погуглить о исключениях завершения приложения. Добавлено через 4 минуты и 50 секунд
Как-то так, наверное. Ищите нужный тип исключения. |
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
создайте окно и используйте его, например во втором потоке. Окно будет уведомлено, далее вы в первом потоке делаете например не цикл бесконечный, а цикл до Event-а... и вырубаетесь по нему...
пример в аттаче.
ладно, признаю, мы тупые.
Это сообщение отредактировал(а) jonie - 7.1.2008, 16:25 Присоединённый файл ( Кол-во скачиваний: 9 )
winSample.rar 11,01 Kb-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
SetConsoleCtrlHandler
Приложение не консольное Это сообщение отредактировал(а) lemax - 7.1.2008, 18:31 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
так чем плох вариант создания окна ? пример я давал... ну скройте его и нет проблем имхо..
чтобы терминировала винда без показа окна можно воспользоваться SetProcessShutDownParameters но я не считаю это верным подходом... Это сообщение отредактировал(а) jonie - 7.1.2008, 19:55 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Если бы я в этом разбирался я бы мигом это сделал. Но пока я вожусь с новой темой. Если вдруг появится примерчик (процесс все события обрабатывает как DefWindowProc()) - буду только рад |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
а что выше во вложении уже не пример оО ?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
или я чего-то не понял
что, обычный процесс может заблокировать выключение системы? я в шоке -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
ну вообще-то я думал, что нет... система обычно убивает процесс через n секунд после того, как он перестаёт отвечать на запросы. Добавлено через 17 секунд в смысле, при попытке убить ждёт данное время. |
|||
|
||||
| lemax |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Семь бед - один ответ Проблемку не решил. Но похоже это поможет. jonie. Спасибо за примеры. Добавлено через 10 минут и 38 секунд
Я сам в шоке. Но баг из программы надо как-то убрать (сунули код- вот и парюсь). А причина бага - это только догадки. Это сообщение отредактировал(а) lemax - 8.1.2008, 00:22 |
||||
|
|||||
| salexs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 24.12.2007 Репутация: нет Всего: нет |
а если так....
include <stdio.h> #include <windows.h> #include <tlhelp32.h> #include <vdmdbg.h> #include <tchar.h> #include <process.h> BOOL MySystemSleep() { HANDLE hToken; TOKEN_PRIVILEGES tkp; BOOL fResult; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); if (GetLastError() != ERROR_SUCCESS) return FALSE; fResult = SetSystemPowerState(FALSE,TRUE); if (!fResult) return FALSE; tkp.Privileges[0].Attributes = 0; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
salexs, пользуйся тегом "Код", пожалуйста.
|
|||
|
||||
| lemax |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Ой, сколько нового для размышления Я зашел сюда чтобы написать свой вариант и ,возможно, закрыть тему. ДО:
ПОСЛЕ:
Сообщите о замеченых проблемах этого жуткого подхода. |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
я уже писал, вы прочитали или пропустили?
в msdn посмотрите описание, думаю вам пойдет завалить процесс молча 8)) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| 0xDEAD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 20.9.2009 Репутация: 3 Всего: 3 |
Возник аналогичный вопрос. Методы с SetConsoleCtrlHandler и с PeekMessage не работают. Есть еще альтернативы, кроме создания окна?
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |