Как прервать ожидание на ввод в С++?

Доброго времени суток!
Есть бесконечный цикл, который принимает команды пользователя. В цикле, соответственно, есть строка:
std::cin.getline(buffer, strlen(buffer));
В определенной ситуации, мне надо выйти из цикла, завершив работу программы, есть ли возможность прервать ожидание на ввод (не прибегая к использованию std::exit)?
  • Вопрос задан
  • 4851 просмотр
Решения вопроса 1
а просто вызвать break
В определенной ситуации
не получится?

UPDATE: если вы не хотите блокироваться на вводе, то на сколько я помню, C++ вам тут может помочь разве что методом readsome. Другие варианты, которые я знаю, системно зависимые, например, posix aio.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@RPG
Не самая хорошая практика, но можно просто закрыть поток, который вопрошает stdin. Пример с потоками POSIX:

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void *worker(void *data)
{
    char buf[128];
    while(fgets(buf, sizeof(buf), stdin))
    {
	puts(buf);
    }
}

int main(int argc, char **argv)
{
    pthread_t t;
    pthread_create(&t, NULL, worker, NULL);
    sleep(3);
    pthread_cancel(t);
    pthread_join(t, NULL);
    return 0;
}


Набросал на Си, но суть должна быть ясна.
Ответ написан
AxisPod
@AxisPod
Данная функция вам в принципе не поможет, необходимо использовать в данном случае нужны функции которые возвращают результат сразу не ожидая действий извне, например peek и организовывать свой цикл ввода. Ну или read.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
16 нояб. 2024, в 02:12
7000 руб./за проект
16 нояб. 2024, в 01:00
3000 руб./в час