Как остановить консоль c
Перейти к содержимому

Как остановить консоль c

Закрытие консоли

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

Консоль закрывается, когда последний присоединенный к нему процесс завершается или вызывает фриконсоле.

Пауза консоли в C++

Какие функции в Visual Studio (помимо system(«pause»); ) останавливают закрытие консоли.

Если речь идет только о работе в IDE, для приостановки работы программы можно использовать обычные точки останова и отладчик, какие-то специальные вызовы в коде не нужны. Более того, использование вызовов типа system(«pause») приведет к тому, что программу невозможно будет нормально вызывать из пакетных файлов: она будет каждый раз ждать ввода с реальной консоли, даже если стандартный ввод перенаправлен из файла и ожидалась работа без участия пользователя. Но, если все же действительно нужно приостановить консоль при любом запуске программы, есть несколько вариантов:

  • Отображает приглашение ввода («Нажмите любую клавишу»)
  • Прерывает работу программы до нажатия любой клавиши
  • Работает только под Windows (в других ОС нет команды PAUSE)
  • Внутренне вызывает командный интерпретатор, поэтому считается «тяжелым» вариантом (если производительность что-то значит в данном случае)

Есть миф, что такой вызов небезопасен, так как если поместить в папку с программой вредоносный файл pause.exe, он будет вызван вместо команды PAUSE. Это не так в современных версиях Windows.

То же самое, но не отображает приглашение ввода.

  • Не отображает приглашение ввода
  • Прерывает работу программы до нажатия клавиши Enter
  • Стандартная функция — работает в любом окружении

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

  • Не отображает приглашение ввода
  • Прерывает работу программы до нажатия любой клавиши
  • Нестандартная функция, доступна в DOS и Windows (в других ОС есть похожие аналоги)

Опять же, существует миф, что в Windows это какой-то DOSовский вызов и использовать его — дикий криминал. На самом деле, внутренне он реализуется как обычный вызов WINAPI-функции ReadConsoleInput, с предварительным отключением у консоли режима ENABLE_LINE_INPUT. Убедиться в этом можно, заглянув в исходники отладочной версии CRT, которые с некоторого времени частично открыты.

Задержка экрана консоли на C++

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

Если вы пользуетесь Visual Studio 2008 или более ранней версией, Вам достаточно запускать программу из интерфейса компилятора с помощью нажатия клавиш Ctrl + F5.

Если Вы пользуетесь другим компилятором или хотите использовать Вашу программу вне компилятора, то возможны два способа создание задержки экрана. Первый — Прописать команду system(«pause»); в конце главной функции main, но перед оператором return, например:

Эта системный оператор командной строки Windows, также можно реализовать задержку экрана с помощью оператора getch();, но для этого необходимо подключить библиотеку conio.h, пример ниже:

Вы можете применять любой из вышеприведенных способов, принципиальных отличий у них не наблюдается, все исходники в разделе C/C++ приведены без команды задержки экрана, так как были откомпилированы в среде Visual Studio 2008 и запускались из под ее интерфейса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *