С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585

Application->Terminate() vs TerminateProcess()

14.08.2015, 15:01. Показов 3382. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо жестко, быстро и безоговорочно убить процесс (свой собственный). При этом мне НЕ нужно выполнения кода в деструкторах или какого либо сохранения данных перед закрытием. Главное быстро и без возможности отмены действия.

Объясните, пожалуйста, в чем разница (если она есть) между:
C++
1
2
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());
    TerminateProcess(hProcess, 0);
и
C++
1
Application->Terminate();
?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2015, 15:01
Ответы с готовыми решениями:

this->Close() vs Application->Terminate()
В силу специфики программы необходимо при определенных условиях закрыть программу. Но закрыть так, что бы процесс закрытия уже ничем нельзя...

Terminate application
Какое сочетание клавиш может помочь мне завершить приложение?

Аналог Application.Terminate
В Делфе есть функция Application.Terminate; Есть ли фналог этой функции в C#?

11
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
14.08.2015, 15:29
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

znseday,

Вызывая Application->Terminate(); ты используешь встроенный метод класса
TApplication, т. е. даёшь своему приложению изнутри команду завершиться.

TerminateProcess() - функция WinApi, вызывая её, ты просишь систему вмешаться в работу процесса (в частном случае своего собственного) и прибить его.

Описание из справки:
Vcl.Forms.TApplication.Terminate
Кликните здесь для просмотра всего текста

Call Terminate to end the application programmatically. By calling Terminate rather than freeing the application object, you allow the application to shut down in an orderly fashion.

Terminate calls the Windows API PostQuitMessage function to perform an orderly shutdown of the application. Terminate is not immediate.

Terminate is called automatically on a WM_QUIT message and when the main form closes.


А вот описание TerminateProcess
https://msdn.microsoft.com/ru-... s.85).aspx


Вот сказать однозначно, что убъёт процесс быстрее, я затрудняюсь, но склоняюсь к TerminateProcess
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
14.08.2015, 15:31
Цитата Сообщение от znseday Посмотреть сообщение
C++
1
2
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());
TerminateProcess(hProcess, 0);
Еще лучше сразу так:
C++
1
TerminateProcess(GetCurrentProcess(), 0);
Думаю, это самый быстрый способ.
2
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
14.08.2015, 15:41  [ТС]
Ну я еще обратил внимание, что после вызова TerminateProcess следующие строчки кода не выполняются (если смотреть через отладчик). А после Application->Terminate() идет выполнение последующего кода.

Добавлено через 3 минуты
Кстати, можно предположить, что самым надежным будет такой код:
C++
1
2
    Application->Terminate();
    TerminateProcess(GetCurrentProcess(), 0);
Хотя это уже на бред похоже.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
14.08.2015, 16:38
znseday,
отладчик проходит по строкам после Application->Terminate();, но они не выполняются. Можешь написать там ShowMessage() и убедиться. Так что такой код не имеет смысла
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
14.08.2015, 16:46
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Lelik-pahan Посмотреть сообщение
склоняюсь к TerminateProcess
Разумеется. Он безусловно уничтожает процесс (аналогично тому, как это делается при снятии процесса через TaskManager), в то время как Application->Terminate всего лишь помещает WM_QUIT в очередь сообщений потока, и пока это сообщение не будет выбрано из очереди, и не отработают все деструкторы, процесс не будет завершен.
2
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
14.08.2015, 18:54  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
отладчик проходит по строкам после Application->Terminate();, но они не выполняются. Можешь написать там ShowMessage() и убедиться
Я убедился, что ShowMessage() после Application->Terminate() реально выполняется. У меня XE6.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
14.08.2015, 19:55
Цитата Сообщение от znseday Посмотреть сообщение
Я убедился, что ShowMessage() после Application->Terminate() реально выполняется. У меня XE6.
Выполни, пожалуйста, вот этот код и скажи, какие сообщение увидишь.
C++
1
2
3
    ShowMessage(L"1");
    Application->Terminate();
    ShowMessage(L"2");
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
14.08.2015, 20:25  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
и скажи, какие сообщение увидишь.
Оба сообщения. Но второе появляется на долю секунды перед закрытием, т.е. код после Terminate() выполняется.

Добавлено через 2 минуты
Или, если не верите, можно доказать так:
C++
1
2
3
4
    Application->Terminate();
 
    FILE *f = fopen("123.txt", "w");
    fclose(f);
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
15.08.2015, 11:13
Цитата Сообщение от znseday Посмотреть сообщение
Или, если не верите, можно доказать так:
Да, убедился.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2015, 15:06
exit (EXIT_SUCCESS);
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
16.08.2015, 23:14  [ТС]
Тогда уж quick_exit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2015, 23:14
Помогаю со студенческими работами здесь

this application has requested the runtime to terminate it in an unusual way
При создании больших циклов(более 1000) возникает данная ошибка this application has requested the runtime to terminate it in an unusual...

This application has requested the Runtime to terminate it in an unusual way
Короче постоянно на разных функциях(QWaitCondition::wait | QMessageBox) вылетает ошибка This application has requested the Runtime to...

FIFA Manager 09: This application has requested the Runtime to terminate
Я маласть поиграю и игру выкидывает причём там ошибка от Microsoft Visual c ++ : Как решить эту проблему : Что делать помогите...

Ошибка работы Qt: this application has requested the runtime to terminate it in an unusual way
Добрый день, при работе программы периодически возникает ошибка: This application has requested the runtime to terminate it in an unusual...

Операторы Exit, Close, Application.Terminate в чем разница между ними?
Хочу понять разницу между этими операторами. Например, оператор Application.Terminate выходит из программы, то же делает и Close. ТОгда...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru