none
Запуск C++/CLR консольного приложения: окно консоли исчезает RRS feed

  • Вопрос

  • Создал простейшее C++/CLR консольное приложение в MS VS 2010. Запускаю его клавишами Ctrl+F5, как для других приложений, однако консольное окно не ожидает нажатия какой-нибудь клавиши, а моментально закрывается.

    Это очередной баг MS VS 2010? В чем проблема-то?! Никакие установки проекта я не менял.
    14 февраля 2013 г. 15:27

Ответы

Все ответы

  • Нет, это не баг. Стандартное поведение. После выполнения основной функции главный поток завершается  и приложение тоже. Нужно чтобы функция ожидала ввод, чтобы не завершалась.
    14 февраля 2013 г. 15:37
    Модератор
  • Ничего не понял. Почему тогда в C# или в C++ без CLR такой проблемы нет?! И какое мне лично дело до всех этих потоков?! Это все запускается из среды VS, так что это именно среда должна отвечать за корректную, то есть ожидаемую работу такого консольного приложения.

    14 февраля 2013 г. 15:46
  • Попробуйте изменить стандартное поведение как написано тут.
    • Помечено в качестве ответа Abolmasov Dmitry 15 февраля 2013 г. 11:58
    14 февраля 2013 г. 15:52
    Модератор
  • Вопрос остался открытым. Нажимаю Ctrl+F5, но консоль консольного C++/CLR приложения моментально закрывается в MS VS 2010. Это баг, который так до сих пор MS не устранила? Как вместо MS, если они выпускают  продукты полные багов и не желают их устранять, сделать самостоятельно так, чтобы консольное окно не закрывалось. Желательно без вставления всяких функций для ожидания ввода пользователя.   



    14 февраля 2013 г. 16:50
  • > Это очередной баг MS VS 2010?

    Нет. Это баг в ваших мозгах.

    > Почему тогда в C# или в C++ без CLR такой проблемы нет?

    Потому что это разные языки.

    > И какое мне лично дело до всех этих потоков?

    Никакого. Идите подметать улицы, там не нужно знать о потоках.

    > Как ... сделать самостоятельно так, чтобы консольное окно не закрывалось.

    Прочитать, наконец, документацию.

    P.S. заколебали нубы.

    14 февраля 2013 г. 17:16
  • А причем здесь разные языки, умник, если среда разработки одна?!!! Если такие, как ты, не умеют писать программы с понятным для пользователей предсказуемым интерфейсом, где одна и та же комбинация клавиш означает одно и тоже действие, то иди подметать улицы. Такому безграмотному хамью, как ты, не место в программировании.

    14 февраля 2013 г. 19:21
  • Имеется гараж. Добротный, кирпичный. Когда заезжаю в этот гараж на машине, то глушу двигатель, выхожу из машины, и она стоит. Когда в этот же гараж заезжаю на двухколёсном мотоцикле, глушу двигатель, и не ставлю его на подножку, то мотоцикл падает! Почему? Ведь машина стоит без всяких подножек! А мотоцикл падает! Почему создатели гаража так плохо построили гараж?
    15 февраля 2013 г. 5:00
  • Чем пререкаться и обращать внимание на подобные мелочи, лучше сконцентируйтесь на написании кода. Тем более ссылку я дал, где показано как в два клика  изменить такое поведение.
    15 февраля 2013 г. 6:24
    Модератор
  • Чтобы не обращать внимание на троллей их следует просто забанить.

    Что касается вашей ссылки, то она не имеет отношения к MS VS 2010.

    15 февраля 2013 г. 7:36
  • Как не имеет:

    • Предложено в качестве ответа I.Zaytsev 4 июня 2013 г. 6:23
    • Помечено в качестве ответа YatajgaModerator 4 июня 2013 г. 11:03
    15 февраля 2013 г. 7:43
    Модератор
  • Спасибо, я сделал эту установку. Но вопрос тем не менее остается открытым. Почему эта установка для консольных проектов не сделана по умолчанию? В чем великий смысл ставить пользователей среды VS в тупик, чтобы они тратили свое и чужое время и давали пищу таким троллям, как этот Petalvik?

    На мой взгляд это явная недоработка. Пользователь в консольном приложении на C++, нажимая Ctrl+F5, получает ожидаемый результат. То же самое имеет место для консольного приложения на C#. И только для консольного приложения на C++/CLI нарущается этот принцип интерфейса, и пользователю надо искать в многочисленных свойствах проекта тот пункт, где происходит воостановление режима, принятого по умолчанию для консольных приложений.. К тому же совершенно непонятно, почему этот пункт запрятан в редакторе, а не где-нибудь в общих свойствах.


    15 февраля 2013 г. 9:07
  • Может Petalvik слегка перегнул палку в данном топике, но он не троль. Просто не стоит зацикливаться на подобных мелочах.
    15 февраля 2013 г. 9:16
    Модератор
  • Здравствуйте Сыроежка,

    Насколько я понимаю, ответ на Ваш изначальный вопрос был дан, так что будьте добры его отметить, чтобы другие пользователи с таким же вопросом увидели его. Что касается бага, если считаете это таковым, то можете написать баг репорт. Вот ссылочка: https://connect.microsoft.com/VisualStudio

    Спасибо

    • Помечено в качестве ответа Abolmasov Dmitry 15 февраля 2013 г. 11:59
    15 февраля 2013 г. 11:17
    Модератор
  • Привет

    Да, возможно это недоработка при запуске C++/CLR приложения без отладки, когда окно консоли не дожидается ввода пользователя. Но вы как профессионал должны понимать почему это происходит, что вам в этой теме уже объяснили. И попытаться решить пробему возможно другим способом - не всегда же вам запускать программу без отладчика, иначе вы лишаетесь одного из мощнейших инструментов Visual Studio и сильно усложняете себе жизнь, как разработчику.

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

    #include "stdafx.h"
    #include <iostream>
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
        Console::WriteLine(L"Hello World");
    	Console::ReadLine(); // ждем ввода - 1ый вариант
    	system("pause"); // пауза перед завершением - 2ой вариант
        return 0;
    }


    Для связи [mail]

    15 февраля 2013 г. 12:08
  • Компилятор выдаст ошибку если использовать команду паузы, это касается консольного приложения CLR 
    Вместо system("pause"); наилучшим вариантом в данном случае будет Console::ReadKey(); он создаст паузу и завершит программу при нажатии любой клавиши.


    • Изменено Joy_1 4 августа 2013 г. 4:34
    4 августа 2013 г. 4:31