Если консоль закрывается после выполнения программы

1) Создается (с флагом CREATE_SUSPENDED) поток A с циклом while(1)
2) Создается (с флагом CREATE_SUSPENDED) поток Б с циклом while(1)
3) Запускается поток А (ResumeThread)
4) На шаге i своего цикла поток A в зависимости от флага Shutdown выполняет следующее:
флаг == 0:
Начинает выполнять некие действия [**], что занимает, к примеру, несколько секунд,
после чего поток А возобновляет поток Б (ResumeThread) (поток Б продолжит выполнение с точки Y (см. ниже) но
поскольку никаких действий там нет это можно считать немедленным переходом к шагу j+1 цикла потока Б),
и поток А останавливает себя (SuspendThread), скажем так, в точке X.
флаг == 1:
return, тем самым завершается.
5) Поток Б, на шаге j+1 своего цикла в зависимости от флага Shutdown выполняет следующее:
флаг == 0:
Выполняет некие действия, которые тоже занимают, несколько секунд, после чего возобновляет поток A (ResumeThread) (он как мы
помним продолжит выполняться с точки X) и останавливает себя (SuspendThread), скажем так, в точке Y (как было сказано

C++ закрывается консоль. Что делать? Задержка экрана консоли. Урок #21.


выше, это можно считать эквивалентным завершению шага j+1, и когда поток будет возобновлен он сразу перейдет к шагу j+2).
флаг == 1:
Выполняет некие действия, которые тоже занимают, несколько секунд, после чего возобновляет поток A (ResumeThread) (он как мы
помним продолжит выполняться с точки X), и наконец return — завершает свою работу.
6) Поток А, продолжая работу с точки Х заканчивает выполнять некие действия, на что уходит еще несколько секунд [***] после чего шаг i
цикла потока А завершен и начинается шаг i + 1, т.е. переходим к пункту 4.

Все работает как часы. Но бес меня попутал добавить обработку закрытия консоли через SetConsoleCtrlHandler.
Функция обработки событий (CTRL_C_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT, CTRL_CLOSE_EVENT) устанавливает
флаг Shutdown в 1 после чего вызывает WaitForSingleObject с параметром INFINITE для ожидания завершения потока А.
И когда WaitForSingleObject возвратит управление завершится работа приложения.

Читайте также:
Программа чтобы распечатывать книжкой

Для имитации ‘неких действий, занимающих несколько секунд’ я использовал функцию Sleep.

Но начал наблюдать странный эффект — если к примеру закрыть консоль во время [**] то приложение вырубается в точке [***]

Проблема заключается в том что при закрытии консоли во время ‘выполнения этих действий’ WaitForSingleObject в обработчике события,
несмотря на параметр INFINITE, не дожидается завершения потока А а тупо через пару секунд вырубает приложение, даже не возвращая
управление программе.

Долгие танцы с бубном вокруг тотема богов многопоточности дали результат — познал я что это происходит когда
после вызова WaitForSingleObject вызывается SuspendThread для ожидаемого потока.

Ну и собственно говоря вопрос в следующем: можно ли как то заставить WaitForSingleObject ждать действительно вечно (ну или хотя бы управление возвращать)?

Как сделать чтобы консоль Python не закрывалась

Источник: gamedev.ru

Окно консоли закрывается, даже после ввода других операторов

Я новичок в программировании и, как кажется, традиционный, я пытался создать программу «hello world» на С#; однако, как только я запускаю программу, она закрывается. Это мой код внутри:

main()

console.writeline(«hello world»);
console.writeline(«enter name»);
console.writeline(«where is the frikin console»);

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

спросил(а) 2012-08-09T15:13:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться
Это очень просто. После этой строки кода:

Console.WriteLine(«where is the frikin console»);
Вы должны добавить это:
Console.ReadLine();

Это должно сработать. Причина, по которой консоль закрывается, заключается в том, что вы сказали ей написать что-то на экран, после того как он закончил писать то, что вы сказали, чтобы написать его, просто закрывает себя всего за долю секунды. если вы добавите Console.ReadLine , консоль будет ждать ввода чего-либо перед закрытием, например нажатия клавиши на клавиатуре.

ответил(а) 2012-08-09T15:17:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

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

Читайте также:
При запуске любой программы открывается браузер

ответил(а) 2012-08-09T15:19:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

Используйте Console.ReadLine(); или Console.ReadKey(); в конце вашей программы дождаться клавиши возврата или для любого ключа.

ответил(а) 2012-08-09T15:14:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

Console.WriteLine(«hello world»);
Console.WriteLine(«enter name»);
Console.WriteLine(«where is the frikin console»);
Console.ReadLine();

Console.ReadLine(); закроет консоль после того, как вы нажмете (например). Console.ReadKey(); закроет консоль после следующего нажатия клавиши Вы также можете прочитать содержимое консоли с помощью этих методов

Console.WriteLine(«hello world»);
Console.WriteLine(«enter name»);
string name = Console.ReadLine();
Console.WriteLine(«Your name is: » + name);
Console.ReadLine();
ответил(а) 2012-08-09T15:14:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться
Попробуйте добавить Console.Read(). Вам нужно как-то приостановить выполнение.
ответил(а) 2012-08-09T15:14:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

Окно автоматически закрывается после вашей программы, вы должны позволить ему принять некоторые данные, например: Добавить

Console.ReadLine();

Которая берет строку ввода (до «n»). И ваша программа будет ждать, пока кто-нибудь не ударит по ключу возврата (они могут набрать что-либо, и программа не будет закрыта: пока вы не нажмете клавишу возврата. Вы можете ввести «привет мир, что вы в порядке?», И ничего не произойдет.) или

Console.ReadKey();

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

ответил(а) 2012-08-15T17:23:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться
использование

Console.ReadLine();

в конце вашего кода. У вас возникла эта проблема, потому что программа просто записывает сообщение, а затем заканчивается, поэтому вы ничего не видите. Добавив эту строку, вы держите программу в ожидании чего-то, чтобы ее набрали, и вы можете прочитать сообщение. После этого введите что-то, чтобы завершить программу.

ответил(а) 2012-08-09T15:21:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

Читайте также:
Разделы программ необходимые при выполнении проекта по технологии

Вы можете использовать CTRL + F5 который откроет командную строку и после выполнения вашего кода отобразит Press any key to continue. Это будет удобно для вас, кроме добавления нескольких строк кода.

ответил(а) 2012-08-09T15:18:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться
добавить строку ниже в конце

Console.ReadLine();
ответил(а) 2012-08-09T15:17:00+04:00 10 лет, 11 месяцев назад
добавить комментарий
пожаловаться

Еще в рубрике

Как обновить все мои IQueryable свойства типа
.net пользовательский контроль и привязка к страницам
Связывание POCO с html-документом и создание результата для строки
Управление памятью для длительного процесса привязки IO

Другие вопросы

Являются ли Http-обработчики подходящим выбором архитектуры?
задать диапазон заголовков HttpWebRequest в приложении Metro
SSRS https://progi.pro/okno-konsoli-zakrivaetsya-dazhe-posle-vvoda-drugih-operatorov-712937″ target=»_blank»]progi.pro[/mask_link]

Visual Studio — консоль закрывается сразу после запуска программы на С ++ (без отладки)

Я пытался запустить простой привет мир в Visual Studio 2017 — пустой проект и пустые консольные приложения, но консоль мгновенно закрывается, когда я нажимаю Ctrl + F5. Visual studio работала нормально несколько дней назад. Я обновил VS Community Edition, но все еще имею ту же проблему. Пробовал разные решения, такие как: Свойства> Свойства конфигурации> Линкер> Система (Консоль (/ SUBSYSTEM: CONSOLE)), Пробовал систему («пауза»), но ничего не работает. У кого-нибудь есть какое-нибудь решение этого?

Дело в том, что VS работал нормально несколько дней назад, и консольное приложение работало без getchar (), system () и подобных функций (консоль оставалась открытой).

Решение

Вот способ для C / C ++:

#include #ifdef _WIN32 #define WINPAUSE system(«pause») #endif

Поместите это в верхнюю часть вашей программы, и ЕСЛИ она в системе Windows (#ifdef _WIN32), то она создаст макрос с именем WINPAUSE. Всякий раз, когда вы хотите, чтобы ваша программа приостановилась, вызовите WINPAUSE; и это приостановит программу, используя команду DOS. Для других систем, таких как Unix / Linux, консоль не должна закрываться при выходе из программы.
Это работает с большинством версий визуальной студии.

Другие решения

Других решений пока нет …

Источник: web-answers.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru