Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
1

Комп не выключается, пока процесс не завершен

24.02.2012, 23:15. Показов 3329. Ответов 31
Метки нет (Все метки)

в обработчике OnCloseQuery написал:
C++
1
2
CanClose=false;
Form->Hide();
Программа скрылась при закрытии. теперь хочу выключить комп или перезагрузить, но комп не выключается (не перезагружается) пока я в диспетчере задач не прерываю процесс.
Как сделать чтоб при выключении (перезагрузке) программа, которая скрыта завершалась самостоятельно я комп выключался (перезгружался)?
Например при включенном Google Chrome выключаю (перезагружаю) комп и Google Chrome нормально ничего не запрашивая закрывается
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2012, 23:15
Ответы с готовыми решениями:

Запущен ли процесс? или Завершен ли дочерний процесс моей программы?
Моя программа выполняет execute('cmd', '/C ...'). На момент execute-а других экземпляров cmd.exe...

Как получить данные из потока ввода, пока он не завершён?
Я бы хотел узнать, как можно получить данные из потока ввода(к примеру я идентифицирую массив с...

Проверить, что завершен процесс
Запущено приложение "Abbyy" в случае если пользователь закрывает "Abbyy", моя программа должна это...

Процесс spoolsrv.exe будет завершен
Помогите разобраться. Есть МФУ HP laserjet 1005 MFP, как сканер комп его находит, сканирует, все...

31
Модератор
3342 / 2120 / 346
Регистрация: 13.01.2012
Сообщений: 8,261
24.02.2012, 23:42 2
Лучший ответ Сообщение было отмечено как решение

Решение

h:
C++
1
2
3
4
5
6
7
bool close;
 
void __fastcall end_session_message(TMessage &Message);
 
BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, end_session_message)
END_MESSAGE_MAP(TForm)
cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall Tmain_form::end_session_message(TMessage &Message)
{
    close = true;
 
    TForm::Dispatch(&Message);
}
 
void __fastcall Tmain_form::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    if (!close)
    {
        CanClose = false;
        //...
    }
}
4
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
10.03.2012, 23:09  [ТС] 3
vxg, у меня Билдер 2006. При компиляции выдает много ошибок
0
Модератор
3342 / 2120 / 346
Регистрация: 13.01.2012
Сообщений: 8,261
11.03.2012, 10:04 4
сколько и каких?
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
15.03.2012, 21:18  [ТС] 5
пробовал функцию ExitProcess(0), но программа завершается только при выходе из системы. А при завершении работы Windows по прежнему не получается

Добавлено через 1 минуту
vxg, функцию end_session_message билдер однозначно не понимает
0
871 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
15.03.2012, 21:27 6
Вам уже объяснили, что в заголовочном файле юнита, в описании класса нужно поймать сообщение об окончании сеанса (WM_QUERYENDSESSION), а end_session_message - ваша произвольная функция.
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
15.03.2012, 22:19  [ТС] 7
Файл .h
C++
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
#include <AppEvnts.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TListView *ListView1;
        TButton *Button1;
        TListBox *ListBox1;
        TListBox *ListBox2;
        TListBox *ListBox3;
        TListBox *ListBox4;
        TListBox *ListBox5;
        TListBox *ListBox6;
        TListBox *ListBox7;
        TListBox *ListBox8;
        TListBox *ListBox9;
        TListBox *ListBox10;
        TButton *Button2;
        TButton *Button3;
        TButton *Button4;
        TButton *Button5;
        TButton *Button6;
        TTimer *Timer2;
        TListBox *ListBox11;
        TMemo *Memo1;
        TListBox *ListBox12;
        TImage *Image1;
        TApplicationEvents *ApplicationEvents1;
        TListBox *ListBox13;
        TMemo *Memo2;
        TButton *Button8;
        TButton *Button9;
        TButton *Button10;
        TMemo *Memo3;
        TListBox *ListBox14;
        TListBox *ListBox15;
        TTimer *Timer3;
        TLabel *Label1;
        TLabel *Label2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
        void __fastcall Timer2Timer(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button6Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall ApplicationEvents1Message(tagMSG &Msg,bool &Handled);
        void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
        void __fastcall Button8Click(TObject *Sender);
        void __fastcall Button9Click(TObject *Sender);
        void __fastcall Button10Click(TObject *Sender);
        void __fastcall Timer3Timer(TObject *Sender);
        void __fastcall end_session_message(TMessage &Message); //эту функцию тут писать?
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
bool close;                                                            //вот здесь 
BEGIN_MESSAGE_MAP                                                    // возникают
VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, end_session_message)  //трудности!!!
END_MESSAGE_MAP(TForm)                                     //куда их записывать?
//---------------------------------------------------------------------------
#endif
0
871 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
15.03.2012, 22:31 8
Сюда.
Миниатюры
Комп не выключается, пока процесс не завершен  
1
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
15.03.2012, 23:44  [ТС] 9
C++
1
2
3
4
5
6
7
8
9
void __fastcall Tmain_form::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    if (!close)
    {
        CanClose = false;
        Form->Hide();
    }
    else ExitProcess(0);   //еще какие функции есть?
}
вот так делаю, но один раз вообще не хотел выключаться пока через диспетчер задач не прервал процесс. А один раз со второго раз выключился комп, но потом при последующем включении выдает сообщение "Система восстановлена после серьезной ошибки"!!!

Как нормально завершать работу программы?

Добавлено через 1 минуту
еще какие функции есть? WinAPI
0
871 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
15.03.2012, 23:48 10
C++
1
CanClose = true;
Не пробовал?
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
16.03.2012, 10:34  [ТС] 11
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
C++
1
CanClose = true;
Не пробовал?
Пробовал. Тоже самый эффект.
А таймеры не могут влиять на закрытие программы? У меня там 2 таймера ежесекундно опрашивают.
0
Модератор
3342 / 2120 / 346
Регистрация: 13.01.2012
Сообщений: 8,261
16.03.2012, 13:14 12
1 делать
Цитата Сообщение от Dondok Посмотреть сообщение
CanClose = true;
не нужно так как там уже true.
2 скрывать форму тоже не нужно - вы ведь хотите завершить приложение
3 убивать процесс не нужно - вы ведь хотите корректно завершить приложение
4 таймеры не могут разве что ваша программа висит из-за них
5 код работает, ищите где еще ошибки
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
16.03.2012, 23:59  [ТС] 13
Цитата Сообщение от vxg Посмотреть сообщение
h:
C++
1
2
3
4
5
6
7
bool close;
 
void __fastcall end_session_message(TMessage &Message);
 
BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, end_session_message)
END_MESSAGE_MAP(TForm)
cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall Tmain_form::end_session_message(TMessage &Message)
{
    close = true;
 
    TForm::Dispatch(&Message);
}
 
void __fastcall Tmain_form::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    if (!close)
    {
        CanClose = false;
        Form->Hide();
    }
    else ExitProcess(0);
}
C++
1
2
3
4
5
6
7
if (!close)
    {
        CanClose = false;
        Form->Hide();
    }
    else ExitProcess(0);     //вот так делаю
//else CanClose=true;
Добавлено через 9 минут
идея такова:
программа ежесекундно опрашивает есть ли в системе флешки, если есть то блокирует. При закрытии форма скрывается и продолжает висеть в памяти. При завершении Windows программа должна корректно завершиться (например как скайп или торрент)
0
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
17.03.2012, 00:08 14
А я вот так комп выключаю. И всё нормально!
C++
1
WinExec("shutdown -s -t 0", SW_HIDE); // выключение
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
17.03.2012, 11:49  [ТС] 15
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
А я вот так комп выключаю. И всё нормально!
C++
1
WinExec("shutdown -s -t 0", SW_HIDE); // выключение
Ошибка выскакивает при выключении. У меня такая мысль возникла: Может другие формы держат программу? У меня аж целых 6 форм я только написал на 1-ю и все. Может сделать на все? поможет?
0
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
17.03.2012, 13:07 16
Какая ошибка? На счет форм я думаю врядли! Все должно работать! У меня тоже много форм было!
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
17.03.2012, 13:11  [ТС] 17
Vovik_0_1, программа нормально запускается, работает. Но при выключении когда нажимаю на завершение работы Windows, то там ошибка появляется и программа не хочет закрываться. ошибка что-то вроде типа этого: "программа обратилась по недопустимому адресу", что то в этом духе
0
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
17.03.2012, 13:22 18
А у тебя какая ОС?
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
17.03.2012, 19:46  [ТС] 19
Vovik_0_1, Windows XP, SP3
0
871 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
17.03.2012, 21:58 20
Цитата Сообщение от Dondok Посмотреть сообщение
ошибка что-то вроде типа этого: "программа обратилась по недопустимому адресу", что то в этом духе
Попробуйте реализовать это в новом проекте, видимо, ошибка этого проекта вообще не связана.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2012, 21:58

Ошибка "Процесс был завершен из-за необработанного исключения"
Добрый день. Есть такая программа Win 10 Tweaker. Раньше запускалась и не было никаких проблем....

Неожидано завершён системный процесс "C:\WINDOWS\system32\lsass.exe" с кодом состояния 0
Всё время перезагружаеться комп, выдаёт сообщение &quot;Отключение системы вызвано NT AUTHORITY\SYSTEM ...

Выключается комп когда играю игры, комп чистил термопасту менял на проце и видеокарте, дальше не знаю че делать?
Заранее спасибо))

Комп, вай фай, бук, инет - когда выключается бук, выключается инте на компе оО
На компе стоит usb wi fi Dlink dwa-125 и инет идет через ADSL модем. Создал сеть, подключил все,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru