У меня проблема. Я хотел бы создать программу, которая ожидает ввода, пока работает таймер. Я обнаружил, что использование сна не работает, так как это остановит программу на фиксированное время. Я не очень понимаю временную привязку, а также ссылку на потоки. Я делаю это в Netbeans на компьютере Mac.
Как я могу это сделать?
Поскольку вы работаете на Mac, вы (скорее всего) используете OSX, совместимую с POSIX.
Тогда вы можете использовать, например, select
опросить, если есть вход на стандартный ввод. select
функция удобно также имеет функцию тайм-аута.
Может быть использовано что-то вроде
fd_set input_set;
timeval timeout;
FD_ZERO(&input_set);
FD_SET(STDIN_FILENO, &input_set);
// Set timeout to one minute
timeout.tv_sec = 60;
timeout.tv_usec = 0;
int result = select(STDIN_FILENO + 1, &input_set, nullptr, nullptr, &timeout);
if (result == -1)
std::cout << "Error in select call: " << strerror(errno) << '\n';
else if (result == 0)
{
// Timeout, do something here
}
else if (FD_ISSET(STDIN_FILENO, &input_set))
{
std::string input;
std::getline(std::cin, input);
// Have input, do something with it
}
Других решений пока нет …