c завершение консольного приложения

Application. Exit Метод

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Сообщает всем средствам переноса сообщений, что они должны завершить работу, а затем закрывает все окна приложения после обработки сообщений.

Перегрузки

Сообщает всем средствам переноса сообщений, что они должны завершить работу, а затем закрывает все окна приложения после обработки сообщений.

Сообщает всем средствам переноса сообщений, что они должны завершить работу, а затем закрывает все окна приложения после обработки сообщений.

Сообщает всем средствам переноса сообщений, что они должны завершить работу, а затем закрывает все окна приложения после обработки сообщений.

Примеры

В следующем примере кода показаны числа из списка в форме. Каждый раз при щелчке button1 приложение добавляет в список еще один номер.

Для примера требуется, чтобы listBox1 и button1 были созданы и помещены в форму.

Комментарии

Exit вызывает следующие события и выполняет связанные условные действия:

Если один из обработчиков отменяет событие, а Exit возвращает без дальнейших действий. В противном случае FormClosed событие вызывается для каждой открытой формы, после чего все выполняющиеся циклы сообщений и формы закрываются.

Источник

Как сделать выход из консольной программы C ++?

Есть ли строка кода, которая завершит программу?

Что-то вроде sys.exit() в Python?

11 ответов

Есть несколько способов заставить вашу программу завершиться. Какой из них подходит, зависит от того, почему вы хотите, чтобы ваша программа была прервана. В большинстве случаев это должно быть выполнением оператора return в вашей основной функции. Как и в следующем.

Как уже определили другие, это позволяет должным образом уничтожить все переменные вашего стека, чтобы очистить их должным образом. Это очень важно.

Если вы обнаружили ошибку где-то глубоко в вашем коде и вам нужно выйти, вы должны выдать исключение, чтобы вернуться к основной функции. Как и в следующем.

Это приводит к разматыванию стека и разрушению всех переменных вашего стека. Все еще очень важно. Обратите внимание, что уместно указывать сбой с ненулевым возвращаемым значением.

Если в маловероятном случае, когда ваша программа обнаружит условие, которое указывает на то, что больше не безопасно выполнять больше операторов, вам следует использовать std :: abort (). Это приведет к внезапной остановке вашей программы без дальнейшей обработки. std :: exit () похож, но может вызывать обработчики atexit, что может быть плохо, если ваша программа достаточно загружена.

Если, однако, ваша программа находится в неисправимом состоянии, она должна выдать исключение. Однако важно осознавать последствия этого. Нет общепринятых лучших практик для принятия решения о том, что должно или не должно быть исключением, но есть некоторые общие правила, о которых вам необходимо знать.

exit является удержанием для C и может привести к тому, что объекты с автоматическим хранением не будут очищены должным образом. abort и terminate эффективно заставляют программу совершить самоубийство и определенно не очистит ресурсы.

Что бы вы ни делали, не используйте исключения, exit или abort / terminate как опора для написания правильно структурированной программы. Сохраните их для исключительных ситуаций.

если вы находитесь в основном, вы можете сделать:

В некоторых других функциях вашей программы:

Источник

Как немедленно закрыть консольное приложение С++?

В последнее время я пытаюсь изучить С++ из этого веб-сайта. К сожалению, всякий раз, когда я пытаюсь запустить один из примеров кода, я вижу, что эта программа открыта примерно на полсекунды, а затем сразу же закрывается. Есть ли способ немедленно закрыть программу, чтобы я мог видеть плоды моих усилий?

ОТВЕТЫ

Ответ 1

Изменить: Как справедливо отмечает Чарльз Бейли в комментарии ниже, это не сработает, если в stdin есть символы, буферизированные, и на самом деле нет хорошего способа обойти это. Если вы используете прилагаемый отладчик, предлагаемое решение John Dibling, вероятно, является самым чистым решением вашей проблемы.

Тем не менее, я оставлю это здесь, и, возможно, кто-то найдет это полезным. Я часто использовал его в качестве быстрого взлома при написании тестов во время разработки.

В конце вашей функции main вы можете вызвать std::getchar();

Ответ 2

Если вы используете Visual Studio, и вы запускаете консольное приложение из среды IDE:

нажатие CTRL-F5 (запуск без отладки) запустит приложение и откроет окно консоли, пока вы не нажмете любую клавишу.

Ответ 3

Решение James работает для всех платформ.

В качестве альтернативы на Windows вы также можете добавить следующее перед возвратом из функции main :

Ответ 4

Если вы используете Microsoft Visual С++ 2010 Express и столкнулись с проблемой: CTRL + F5 не работает для того, чтобы консоль открылась после завершения программы, посмотрите этот поток MSDN.

Вероятно, ваша IDE настроена на закрытие консоли после запуска CTRL + F5; на самом деле, «пустой проект» в Visual С++ 2010 закрывает консоль по умолчанию. Чтобы изменить это, сделайте так, как предположил Microsoft-модератор:

Пожалуйста, щелкните правой кнопкой мыши имя вашего проекта и перейдите на страницу «Свойства», пожалуйста, перейдите в «Свойства конфигурации» → «Линкер» → «Система», выберите «Консоль» (/SUBSYSTEM: CONSOLE) в раскрывающемся списке SubSystem. Поскольку по умолчанию проект Empty не указывает его.

Ответ 5

Ответ 6

Почему бы не просто запустить программу с консоли, а запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.

[EDIT]: Когда я использую KDevelop4, на вкладке внизу среды IDE имеется полностью установленный экземпляр Bash (CLI Linux). Это то, что я использую в таких обстоятельствах.

Ответ 7

До конца кода вставьте эту строку:

Это будет держать консоль до тех пор, пока вы не нажмете клавишу.

Ответ 8

Вызвать cin.get(); 2 раза:

Ответ 9

Если вы запустите свой код из компетентной среды разработки, например Code:: Blocks, среда IDE будет управлять консолью, которую она использует для запуска код, сохраняя его открытым, когда приложение закрывается. Вы не хотите добавлять специальный код, чтобы консоль открывалась, потому что это предотвратит его правильное функционирование, если вы используете его на самом деле, вне среды IDE.

Ответ 10

Если вы действительно отлаживаете свое приложение в Visual С++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl + F5 или выберите «Начать без отладки» в меню (обычно это в меню «Отладка», которое, я согласен, сбивает с толку.) Это будет немного быстрее, и что более важно для вас, остановится в конце, если вам не придется менять свой код.

В качестве альтернативы откройте командную строку, перейдите в папку, в которой находится ваш exe, и запустите ее, набрав ее имя. Таким образом, когда он закончил выполнение командной строки, она не закрывается, и вы можете увидеть результат. Я предпочитаю оба этих метода добавлять код, который останавливает приложение так же, как и его завершение.

Ответ 11

Хорошо, я предполагаю, что вы работаете в Windows с помощью Visual Studio. почему? Хорошо, потому что если вы находитесь на какой-то ОС Linux, вы, вероятно, будете запускать ее с консоли.

В любом случае вы можете добавить crap в конец вашей программы, как предлагают другие, или просто нажать CTRL + F5 (начать без отладки), а Visual Studio покинет консоль до завершения.

Ответ 12

Добавьте следующие строки перед любой функцией exit() или перед любым return в main() :

Ответ 13

Просто добавьте следующее в конце своей программы. Он попытается зафиксировать некоторую форму ввода пользователя, таким образом, он не позволит автоматически закрывать консоль.

Ответ 14

Для Visual Studio (и только Visual Studio) следующий фрагмент кода дает вам приглашение «дождаться нажатия клавиши для продолжения», которое действительно ждет, когда пользователь будет явно нажимать новый ключ, сначала очистив входной буфер:

Обратите внимание, что для этого используется макрос tchar.h для совместимости с несколькими «наборами символов» (как их называет VС++).

Ответ 15

Вместо того, чтобы нажимать кнопку запуска, одновременно нажмите клавиши CTRL и F5, это даст вам нажать любую клавишу для продолжения сообщения. Или введите «(предупреждение использовать это только для тестирования не актуальных программ, поскольку антивирусы им не нравятся. )» в конце вашей основной функции, но: (предупреждение использовать это только для тестирования не реальных программ в качестве антивирусов дона ‘t нравится это. )

Ответ 16

Используйте #include «stdafx.h» и system(«pause»); так же, как и код ниже.

Ответ 17

Ответ 18

Вы даже можете объявить целое число в начале вашей функции main() (скажем int a; ) и поместить std::cin >> a; непосредственно перед возвращаемым значением. Таким образом, программа будет работать до тех пор, пока вы не нажмете клавишу и не войдете.

Ответ 19

Это работает хорошо:

Если вы сначала очистите буфер, это не будет проблемой при чтении следующего. По какой-то причине cin.ignore(1) не работает, оно должно быть 2.

Ответ 20

Все, что вам нужно сделать, установите переменную для x, затем просто введите это перед возвратом 0;

Ответ 21

Вы всегда можете создать пакетный файл. Например, если ваша программа называется helloworld.exe, некоторый код будет:

Ответ 22

Я помещаю точку останова при последнем возврате 0 программы. Он отлично работает.

Ответ 23

Ответ 24

Ответ 25

Я просто делаю это:

Примечание: очистка буфера cin и это необходимо только в том случае, если вы использовали cin в какой-то момент раньше в вашей программе. Кроме того, использование std:: numeric_limits:: max(), вероятно, лучше, чем INT_MAX, но оно немного многословно и обычно не нужно.

Ответ 26

Ответ 27

Аналогичная идея для ответа yeh, минимальная альтернатива.

Создайте пакетный файл со следующим содержимым:

Затем используйте командный файл.

Ответ 28

Я не заметил, что кто-то еще разместил это, так что вот оно.

Ответ 29

просто используйте cin.ignore() прямо перед возвратом 0; дважды

Ответ 30

Источник

Завершение консольных приложений Qt (Linux, Windows)

ClearExitConsoleQtApplication QtCreatorКонсольная программа Qt не выходит после завершения всех действий. Это возникает из-за того, что в конце программы запускается очередь сообщений, которая работает в главном потоке. Она необходима для обработки сигналов и слотов. Очередь запускается строкой:

Если не используются потоки, сигналы и слоты то можно заменить эту строку стандартной:

Но так совсем не интересно. Поэтому было решено научиться корректно выходить из консольных приложений написанных с помощью Qt. Нормально выходить в моем понимании означает, что все потоки останавливаются, а память освобождается. CTRL+C! Не думая, данная комбинация клавиш была принята в качестве конечной цели для выхода из приложения. Порывшись в интернете, нашел несколько решений. После их тестирования оставил только одно.

Решение заключается в создании нового объекта, который содержит в своём конструкторе функцию signal. Функция определяет способ обработки сигналов с указанием номера сигнала (Specifies a way to handle those signals with the signal number specified by sig). Для примера назвал класс CleanExit. Вот его заголовочный файл:

Файл исходного кода:

Далее остается создать объект в основном потоке программы, для консольных приложений это функция main:

Вот так выглядит завершение работы программы в терминале Ubuntu и QtCreator’е:

ClearExitConsoleQtApplication terminal ClearExitConsoleQtApplication QtCreator

Upd. Попробовал в винде. Результат в терминале такой же как в Ubuntu, а вот QtCreator’е совсем по другому. Не знаю с чем это связано, но так как в терминалах работают одинаково, то, думаю, можно считать решение кроссплатформенным.

ClearExitConsoleQtApplication terminal Windows ClearExitConsoleQtApplication QtCreator Windows

При использовании дочерних потоков выход из них будет происходить корректно. То есть если определить слот finished, то он выполнится. При аварийном завершении программы такого не происходило. Теперь всё нормально!

Источник

Русские Блоги

На моем компьютере каждый день запускается множество консольных программ, поэтому управление работой этих программ становится проблемой. Другими словами, вы также можете рассмотреть возможность запуска консольной программы для выполнения определенных задач.

Содержание этой статьи

Используйте Ctrl + C, чтобы завершить консольную программу

Если вы используете его напрямую Process.Kill Убейте процесс, процесс может не успеть сохранить данные. Поэтому, будь то оконная программа или консольная программа, лучше всего позволить консольной программе закрыться сама по себе.

e827c14cd42816b84b0152a8536b5018

d2a9fdcf9ec5cd26f057c639bbc48b63

Ctrl + C сигнал

API Windows предоставляет способ связать текущий процесс с процессом целевой консоли, чтобы мы могли отправлять себе Ctrl+C Сигнал о завершении другого связанного с ним консольного процесса.

Методами ассоциирования и разъединения являются следующие два: AttachConsole с участием FreeConsole :

Однако при отправке Ctrl+C Когда поступает сигнал, выйдет не только консольная программа, которую мы хотим закрыть, но и наша собственная программа (даже если мы сами являемся программой с графическим интерфейсом). Поэтому мы должны организовать себя, чтобы ответить Ctrl+C сигнал.

Необходимо использовать другой API:

Однако, поскольку на самом деле нам не нужно Ctrl+C Чтобы ответить, просто временно отключите следующее, поэтому мы передаем этому делегату null Достаточно.

Ниже я выложу полный код.

Полный исходный код

как пользоваться

Теперь мы можем позвонить ConsoleInterop.StopConsoleProgram(process) Чтобы безопасно завершить консольную программу.

Конечно, чтобы справиться с некоторыми неожиданными ситуациями, я также добавил таймаут. Следующее использование демонстрирует, что если программа не завершилась по истечении 2 секунд тайм-аута, она будет принудительно завершена.

d2a9fdcf9ec5cd26f057c639bbc48b63

Ссылка

Мой блог начнется вhttps://blog.walterlv.com/, И CSDN будет выбирать и публиковать из него, но после публикации он редко обновляется.

Если вы видите в блоге что-то, чего не понимаете, сообщите об этом. я построилдотнет профессионально-технический колледж Приглашаем всех присоединиться.

cb724426ff8e6ef6d0def9ef0ee2d66a

Эта работа используетМеждународное лицензионное соглашение Creative Commons Attribution-Non-Commercial Use-Same Way Sharing 4.0Сделайте разрешение. Добро пожаловать на перепечатку, использование и повторную публикацию, но не забудьте сохранить подпись статьи Лу И (включая ссылку:https://walterlv.blog.csdn.net/), не должны использоваться в коммерческих целях, а измененные работы, основанные на этой статье, должны выпускаться под той же лицензией. Если есть вопросы, пожалуйстаСвяжитесь со мной。

Интеллектуальная рекомендация

c537d845e8b980d87e961ba60feb50ae

1 проект SPSS Modeler 2-х банковская пользовательская модель интеллектуального анализа данных

5191a3dc1de6ce40050990c9022d6b28

Введение в микросервисы Java (Spring-boot + MyBatis + Maven)

1. Создание проекта Создайте новый проект maven, как показано ниже: Выберите путь, следующий шаг Введите содержимое 1 и 2, нажмите Готово Проект создан, структура которого показана на рисунке ниже: За.

Использовать эксперимент на табличном пространстве ExpDP / IMPDP

Объявите, что этот эксперимент использует машину, два экземпляра для моделирования передачи табличного пространства. Пространство табличного пространства передачи немного: дамп из метаданных информаци.

c86223451c5ceb814d17627dafa1400c

Используйте python для анализа и воспроизведения данных (1)

2ced768c70e657a6eff867af94e0e6f1

Формат протокола ICMP ICMP-сообщение инкапсулировано в IP-пакет, потому что разведчик должен легко упаковать. Наиболее часто используемым типом является то, что активный запрос равен 8, а ответ активн.

Вам также может понравиться

Использование библиотеки классов telnetd java для создания потока демона

d8d8fcacbfc426d2b6bb642149c1df96

Принципы и практика системы баз данных Чэнь Хуншун Эксперимент 5 Запрос данных

c3fdad7ad4cfa33d54b942bec7b6d3a8

1、 :9200/index/type/id Индекс: эквивалентный базу данных Тип: эквивалентный таблицу ID: ID, эквивалентный идентификатору каждой записи 2, используйте встроенный тестовой веб-сервис Golan.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • c динамическое создание элементов на форме
  • c windows system32 rundll32 exe приложение не найдено