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

Application->Terminate() vs TerminateProcess()

14.08.2015, 15:01. Показов 3429. Ответов 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
8488 / 6155 / 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru