Таймеры обратного отсчета потоков

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

Как я могу это сделать?

0

Решение

Поскольку вы работаете на 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
}
2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector