Как сделать паузу в консольном приложении
У меня есть коллекция модульных тестов Boost, которые я хочу запустить как консольное приложение.
когда я работаю над проектом и запускаю тесты, я хотел бы иметь возможность отлаживать тесты, и я хотел бы, чтобы консоль оставалась открытой после запуска тестов.
Я вижу, что если я запускаю в режиме выпуска, окно консоли остается после выхода программы, но в режиме отладки это не так.
Я не хочу добавлять ' system ("pause"); ' или любые другие хаки как чтение персонажа в моей программе. Я просто хочу сделать паузу Visual Studio после запуска тестов с отладкой, как если бы я работал в режиме выпуска. Мне также хотелось бы, чтобы выходные данные тестов были захвачены в одном из выходных окон Visual Studio, но это также кажется сложнее, чем должно быть.
Как я могу это сделать?
Boost test предлагает следующее рекомендации по использованию Visual Studio это позволит вам автоматически запускать модульные тесты в конце компиляции и записывать выходные данные в окно сборки.
хороший побочный эффект этого трюка заключается в том, что он позволяет рассматривать ошибки тестирования как ошибки компиляции. ". вы можете перейти через эти ошибки, используя обычные сочетания клавиш / щелчки мыши, которые вы используете для анализа ошибок компиляции. "
попробуйте запустить приложение с Ctrl + F5 комбинации.
http://connect.microsoft.com/VisualStudio/feedback/details/540969/missing-press-any-key-to-continue-when-lauching-with-ctrl-f5
в старых версиях он будет по умолчанию для консольной подсистемы, даже если вы выбрали "пустой проект", но не в 2010 году, поэтому вам нужно установить его вручную. Для этого выберите проект в обозревателе решений справа или слева (наверное уже выбран, поэтому вам не придется беспокоиться об этом). Затем выберите "проект" из списка строка меню выпадающие меню, затем выберите"имя_проекта свойства " > "свойства конфигурации" > "компоновщик" > " система "и установите первое свойство, раскрывающееся свойство" подсистема "в"консоль (/SUBSYSTEM:CONSOLE)". Окно консоли теперь должно оставаться открытым после выполнения, как обычно.
установите точку останова в последней строке кода.
Я только что скопировал из http://social.msdn.microsoft.com/forums/en-US/Vsexpressvc/thread/1555ce45-8313-4669-a31e-b95b5d28c787/?prof=required:
следующие работы для меня :-)
/////////////////////////////////////////////////////////////////////////////////////
вот еще одна причина, по которой консоль может исчезнуть. И решение:
с новой Visual Studio 2010 Вы можете увидеть это поведение даже при использовании Ctrl + F5 он же "запуск без отладки". Скорее всего, это связано с тем, что вы создали "пустой проект" вместо "консольного приложения Win32". Если вы создаете проект как "консольное приложение Win32" вы можете игнорировать это, пока это не касается.
в более старых версиях это будет по умолчанию для консольной подсистемы, даже если вы выбрали "пустой проект", но не в Visual Studio 2010, поэтому вам нужно установить его вручную. Для этого выберите проект в обозреватель решений справа или слева (вероятно, уже выбран, поэтому вам не нужно беспокоиться об этом).
затем выберите " проект "из выпадающего меню Меню, затем выберите"имя_проекта свойства " → "свойства конфигурации" → "компоновщик" → " система "и установите первое свойство, раскрывающееся свойство" подсистема "на"консоль (/SUBSYSTEM:CONSOLE)". В окне консоли должен оставаться открытым после выполнения обычный.
/////////////////////////////////////////////////////////////////////////////////////
Если это консольное приложение, используйте Ctrl + F5 .
вы говорите, что не хотите использовать system("pause") рубить. Почему бы и нет?
если это потому, что вы не хотите, чтобы программа подскажет, когда это не будучи отлаженным, есть способ обойти это. Это работает для меня:
Я просто вставляю этот код в каждое новое консольное приложение, которое я пишу. Если программа запускается из командного окна, положение курсора не будет , и не atexit() . Если он был запущен с вашего отладчика (любой отладчик) положение курсора консоли будет и atexit() вызов будет выполнен.
Я получил идею из примера программы, которая раньше была в библиотеке MSDN, но я думаю, что она была удалена.
Примечание: реализация программы system() в Microsoft Visual Studio требует, чтобы переменная среды COMSPEC идентифицировала интерпретатор командной строки. Если эта переменная среды будет испорчена - например, если у вас возникла проблема в Visual Studio отладочные свойства проекта, чтобы переменные среды не передавались должным образом при запуске программы-тогда он просто не будет работать молча.
Я бы использовал команду"wait" -в течение определенного времени (миллисекунд) по вашему собственному выбору. Приложение выполняется до строки, которую вы хотите проверить, а затем продолжается после истечения времени.
включить :
вы также можете настроить свой исполняемый файл как внешний инструмент и пометить инструмент для использовать окне вывода. Таким образом, вывод инструмента будет виден в самой Visual Studio, а не в отдельном окне.
Я запускаю приложение с F11 и получаю точку останова где-то в unit_test_main.ИПП (может быть ассемблерный код). Я использую shift-f11 (Step out) для запуска модульного теста и получения следующей инструкции по сборке в CRT (обычно в mainCRTStartup()). Я использую F9, чтобы установить точку останова на инструкции.
при следующем вызове я могу запустить приложение с помощью F5, и приложение сломается после запуска тестов, поэтому у меня есть возможность заглянуть в окно консоли
просто используйте библиотеку журналов, например log4net, и пусть она войдет в приложение для файлов.
сделайте readline в конце (это "forma cochina", как мы говорим в Колумбии, но это работает):
Я новичок C. я запускаю программу C, но окно закрывается слишком быстро, прежде чем я могу что-либо увидеть. Как я могу приостановить окно?
вы можете поставить
перед возвратом из функции main. Это будет ждать ввода символов перед выходом из программы.
в качестве альтернативы вы можете запустить свою программу из командной строки, и вывод будет виден.
Если вы хотите просто задержка закрытие окна без фактического нажатия кнопки ( getchar() способ), вы можете просто использовать sleep() метод; он принимает количество секунд вы хотите спать в качестве аргумента.
это консольная программа, работающая в Windows? Если это так, запустите его с консоли, которую вы уже открыли. т. е. запустите "cmd", затем перейдите в свой каталог, который имеет.exe в нем (с помощью команды cd), затем введите имя exe-файла. Окно консоли останется открытым.
Если вы делаете программу окна консоли, вы можете использовать system ("пауза");
в системах POSIX лучшее решение, похоже, использует:
если процесс получает сигнал, эффект которого заключается в его завершении (обычно путем ввода Ctrl + C в терминале), то pause не возвратит и процесс эффектно будет прекращен этим сигналом. Более продвинутое использование-использовать функцию улавливания сигналов, вызываемую при получении соответствующего сигнала, после чего pause возвращает возобновление процесс.
Примечание: использование getchar() не будет работать стандартный ввод перенаправляется; следовательно, это более общее решение.
Я предполагаю, что вы находитесь в Windows. Вместо того, чтобы пытаться запустить программу, дважды щелкнув по ее значку или нажав кнопку в IDE, откройте командную строку, компакт-диск в каталог, в котором находится ваша программа, и запустите ее, введя ее имя в командной строке.
getch() также может использоваться, который определен в conio.h.
пример программы будет выглядеть следующим образом:
getch() ждет ввода символов с клавиатуры (не обязательно вводить ключ).
вы также можете просто использовать system("pause");
хорошая работа я вспомнил о пакетных файлах DOS. Вообще не нужен Getchar (). Просто написать пакетный файл, чтобы изменить каталог (CD) в папку, где находится программа. введите имя программы exe и в следующей строке введите pause. пример:
для Linux; getchar() все, что вам нужно.
Если вы находитесь на Windows, проверьте следующее, Это именно то, что вам нужно!
- функция kbhit () используется для определения, была ли нажата клавиша или нет.
- Чтобы использовать kbhit () в C или C++ prorams, вы должны включить файл заголовка "conio.ч."
например, посмотрите, как это работает в следующем программа;
когда я компилирую и запускаю программу,этой что я вижу.
только когда пользователь нажимает только одну клавишу с клавиатуры,kbhit() возвращает 1.
Многие люди предлагали разные способы, такие как
Другие даже показали самодельные функции, которые были более эффективными, чем другие. И это настоящая головная боль, чтобы решить, какое из них является лучшим решением.
Кнопка воспроизведения отображается, и когда я нажимаю кнопку воспроизведения, она воспроизводит аудиофайл и превращает кнопку воспроизведения в кнопку паузы, но когда я нажимаю кнопку паузы, чтобы приостановить его. Это не пауза, а повторное воспроизведение аудиофайла с самого начала. После.
Запустите программу любым из следующих способов:
OR как предположил Раджеш
- Console.ReadKey() //pauses for any key
- Console.ReadLine() //pauses for enter key
Обычно я использую do и while для приостановки консоли. Затем, при необходимости, консоль должна возобновиться, если вы нажмете определенную клавишу.
Пример
Если вы оставите это значение как //Do Something While Paused , консоль возобновится только в том случае, если клавиша Esc была нажата, ничего не делая во время паузы.
Однако если вы не хотите, чтобы консольное приложение возобновлялось, вы можете использовать while (true); вместо while (Console.ReadKey(true).Key != ConsoleKey.Escape);
Пример
Обратите внимание: консольное приложение остановится, потому что, делая do < >while (Condition); , вы просто сообщаете консольному приложению, что вы что-то делаете. Таким образом, консольное приложение будет ждать выполнения операции. Затем, как правило, закрываются, когда нечего делать.
Обратите внимание: while используется для цикла. Таким образом, приложение не закроется, если условие не станет ложным.
Спасибо,
Я надеюсь, что вы найдете это полезным :)
Если вы говорите о встроенной команде "pause", вы всегда можете назвать ее-даже если она уродлива. Вот что я использую:
Нормально вроде так:
Надеюсь, это поможет.
Я хочу играть небольшую музыку на своем сайте, когда пользователи входят в систему. Но проблема в том, что если я использую звук HTML5, то это замедлит скорость и загрузка страницы займет больше времени (я могу потерять посетителей). Есть ли способы загрузить музыку без замедления загрузки.
Поэтому я работаю над консольной программой python(на самом деле python3), где я использую input(>) для получения команды от пользователя. Теперь я хочу реализовать функцию last command в своей программе - когда пользователи нажимают стрелку вверх на клавиатуре, они видят свою последнюю.
Или вы можете использовать то, что сделал ПЭТ, но для Аргументов вместо того, чтобы
Вы можете использовать
где число 4 - это количество секунд, в течение которых консоль будет делать паузу перед выполнением rest программы.
И вся функция была бы
и вы вызовете его с помощью функции паузы с количеством секунд для паузы.
Надеюсь, это поможет.
вы можете написать "Console.ReadLine();" это тоже для pupose.
Похожие вопросы:
Надеюсь, простой вопрос - Как указать, какую среду использовать при запуске консольной команды в Symfony2. Я создал несколько команд, однако я хотел бы запустить их в контексте моей среды 'staging'.
пожалуйста, можно ли поймать вывод из консольной программы? Я хотел бы написать GUI для консольного приложения, но мне нужно получить его вывод.
Кнопка воспроизведения отображается, и когда я нажимаю кнопку воспроизведения, она воспроизводит аудиофайл и превращает кнопку воспроизведения в кнопку паузы, но когда я нажимаю кнопку паузы, чтобы.
Я хочу играть небольшую музыку на своем сайте, когда пользователи входят в систему. Но проблема в том, что если я использую звук HTML5, то это замедлит скорость и загрузка страницы займет больше.
Поэтому я работаю над консольной программой python(на самом деле python3), где я использую input(>) для получения команды от пользователя. Теперь я хочу реализовать функцию last command в своей.
Я пытаюсь создать проекты платформы Google Cloud без консольной веб-страницы, потому что думаю о создании нескольких проектов. Так как я проверил gcloud, и он пока поддерживает только описание.
Я выполняю серию длительных анализов, и консоль RStudio отображает только результаты для последних 1000 строк, где мне нужно было бы около 30 000 строк, чтобы увидеть все результаты сразу. Я.
Во многих языках программирования есть функция sleep , которая может задерживать выполнение программы на несколько секунд. Но в JavaScript такая функция отсутствует из-за его асинхронного характера. В этой статье мы рассмотрим как реализовать js sleep самостоятельно.
setTimout и sleep в JavaScript
Для того, чтобы лучше понять проблему, посмотрите следующий код. Он делает запрос к API GitHub для получения пользовательских данных, затем выводит количество публичных репозиториев и, наконец, пошлет в консоль "Привет!"
Но если запустить такой код, то сначала он выведет на экран "Привет!", а уже потом количество публичных репозиториев.
Так происходит, потому что получение данных от API — это асинхронная операция в JavaScript. Интерпритатор JavaScript встретит команду fetch и отправит запрос. Он не будет ждать завершения запроса и выведет "Привет!" в консоль, и потом через пару сотен миллисекунд выдаст количество рекозиториев.
Создаем простую задержку с помощью js setTimeout
Теперь, давайте рассмотрим создание задержки в JavaScript, используя метод setTimeout .
Этот код запишет в консоль "Привет", а затем через 3 секунды "мир" ‐ во многих случаях такой задержки достаточно. Но имейте ввиду, что в js setTimeout ‐ это асинхронный метод. Попробуйте изменить предыдущий код следующим образом:
Этот код выведет: Привет Пока мир.
Вы также можете использовать setTimeout (или его брата setInterval ), чтобы заставить JavaScript подождать пока не будет выполнено какое-либо условие. К примеру, вам нужно дождаться появления определенного элемента на странице:
Управление потоком в современном JavaScript
В JavaScript часто бывают ситуации, когда вам нужно подождать, пока то-то произойдет, а затем сделать что-то в ответ. В примере выше мы использовали анонимную callback функцию. Но что если вам нужно подождать несколько событий? В этом случае синтаксис быстро становится довольно грубым.
К счастью, язык значительно изменился за последние несколько лет и теперь у нас есть новые конструкции для этих целей. К примеру, мы может переписать код для получения информации из API GitHub, используя async await .
Теперь код выполняется сверху вниз.
Sleep в JavaScript
Мы уже готовы остановить поток выполнения программы и заставить JavaScript спать. Вот как мы можем это сделать:
В результате сначала в консоли отобразится "Привет", пауза на две секунды, а затем "мир". Функция работает с помощью метода Date.now , получает количество миллисекунд, прошедших с 1 января 1970 года, и присваивает это значение переменной date . Запускает цикл, который будет продолжаться, пока разница между date и currentDate будет меньше нужной задержки.
Улучшаем функцию js sleep
Функция делает то, что нам нужно, но у нее есть недостаток: если вам нужна большая задержка, то она может привести к поломке программы. Объединим методы изученные ранее в статье, чтобы сделать менее навязчивую функцию сна.
Этот код выведет в консоль "Привет", подождет 2 секунды, затем выведет "мир". Внутри мы используем Promise.
Читайте также: