


C++ ввод без ожидания
Я хочу чтобы код работал и я в любой момент мог нажать клавишу и чтото происходило типо getch() ; останавливает программу в ожидании нажатия а мне надо без ожидания
Такое можно сделать с помощью распараллеливания работы основной программы и ввода. Есть такой механизм threads. В итоге один тред будет ожидать ввод и принимать приходящие с клавиатуры символы, а второй - делать что-то ещё.
Для выполнения ввода без ожидания в C++, можно использовать функции и библиотеки, которые позволяют работать с не блокирующими вводами. Один из наиболее популярных способов — использование терминальной библиотеки `ncurses` на Unix-подобных системах или библиотеки `conio.h` на Windows. Вот пример для обоих случаев:
### Unix-подобные системы (Linux, macOS):
Использование библиотеки `ncurses`:
```cpp
#include <ncurses.h>
#include <unistd.h>
int main() {
initscr(); // Инициализация ncurses
nodelay(stdscr, TRUE); // Установка не блокирующего ввода
noecho(); // Отключение эхо ввода символов
int ch;
while (true) {
ch = getch(); // Получение символа
if (ch != ERR) { // Проверка, был ли введен символ
printw("You pressed: %c\n", ch);
refresh();
}
usleep(100000); // Задержка для уменьшения нагрузки на процессор
}
endwin(); // Закрытие ncurses
return 0;
}
```
### Windows:
Использование библиотеки `conio.h`:
```cpp
#include <iostream>
#include <conio.h>
int main() {
while (true) {
if (_kbhit()) { // Проверка, была ли нажата клавиша
char ch = _getch(); // Получение символа
std::cout << "You pressed: " << ch << std::endl;
}
Sleep(100); // Задержка для уменьшения нагрузки на процессор
}
return 0;
}
```
Обратите внимание, что в первом случае нужно установить библиотеку `ncurses` (например, с помощью пакетных менеджеров `apt`, `brew` и т.д.), а во втором случае используется встроенная библиотека Windows.
Эти примеры показывают, как можно обрабатывать ввод без ожидания, что позволяет программе продолжать выполнение, пока не будет нажата клавиша.