Пара более возможных причин для использования потоков:
Хранение GUI, быстро реагирующего во время интенсивной обработки, не всегда требует дополнительных потоков. Отдельная функция обратного вызова обычно достаточна.
, Если ни одно из вышеупомянутого не применяется и я все еще хочу параллелизм по некоторым причинам, я предпочитаю запускать независимый процесс, если это возможно.
Использование нестандартной функции ввода-вывода - неплохая практика как таковой ; это становится проблемой, если вы собираетесь перенести этот код на другую платформу, не поддерживающую getch ()
.
Проблема в том, что нет стандартных библиотечных функций , которые обнаруживают отдельные нажатия клавиш ( getchar ()
и fgetc ()
буферизированы и требуют нажатия Войдите, прежде чем они вернутся); для этого вам придется использовать что-то нестандартное. Если вы собираетесь запускать этот код только на этой конкретной платформе, используйте getch ()
, если это то, что вам нужно, и просто помните, что это решение не обязательно применимо к другим платформам. Если вы намереваетесь перенести этот код на платформы, которые не поддерживают getch ()
, изолируйте системный вызов функции-оболочки, чтобы при переносе кода требовался только код внутри функции-оболочки. изменить.
int getKeystroke(void)
{
/**
* Put platform-specific call here
*/
return getch();
}
int main(void)
{
... // do stuff here
getKeystroke();
return 0;
}
Я предпочитаю запускать программу из командной строки.
getchar ()
является стандартным, но из-за буферизации строки вам все равно нужно будет нажать Enter
, прежде чем getchar
вернется.
Я думаю, что использование getch () на сегодняшний день является наиболее распространенным способом предотвращения закрытия окна консоли, но в C ++ наиболее опытные программисты рекомендуют вам использовать cin.get
std::cin.get();
вместо:
getch();
Вы используете компилятор Turbo C? Здесь широко используется getch ()
.
OTOH, если вы хотите, чтобы программа ждала, запустите двоичный файл внутри оболочки / терминала / приглашения. Перейдите в этот каталог и вызовите
Windows:
C:> executable.exe
Linux:
~$ ./exec
Вы можете использовать getchar ()
, единственная проблема заключается в том, что он буферизуется. getch ()
не буферизуется. Вы можете сделать getchar ()
небуферизованным, но код для этого того не стоит. Я попробовал это однажды, но из-за его большой сложности никогда не удосужился попробовать это снова.
В дополнение к другим ответам вы также можете использовать это в Windows, особенно если вы собираетесь дождаться нажатия клавиши для завершения программы:
system("pause");
Просто попробуйте ответить на другой вопрос, вы можете использовать
while (1)
sleep (10);
в конце основной функции (до return 0;
), а затем вы можете нажать ctrl-c, чтобы завершить программу. Я думаю, вы не должны сталкиваться с проблемой переносимости, и я надеюсь, что это тоже неплохая практика программирования :)
Вы можете исправить окно терминала, чтобы оно не исчезало.