Я хотел бы прочитать некоторые данные из потока, который у меня есть std::getline
. Ниже образца с использованием std::cin
.проверка наличия данных перед вызовом std :: getline
std::string line;
std::getline(std::cin, line);
Это блокирующая функция, т. Е. Если нет данных или строк для чтения, они блокируют выполнение.
Знаете ли вы, существует ли функция проверки доступности данных перед вызовом std::getline
? Я не хочу блокировать.
Как проверить, заполнен ли буфер потока данными, действительными для успешного вызова, std::getline
?
Независимо выглядит как код ниже
if(dataAvailableInStream())
{
std::string line;
std::getline(std::cin, line);
}
Вы говорите, что вы не хотите блокировать, но ваш пример использует std :: cin. Скажите нам, что вы пытаетесь выполнить, и, возможно, мы сможем уточнить наши ответы, чтобы быть более полезными. – nathan
Привет всем! У меня есть блокирующий поток. В конкретном я использую библиотеку POCO для процессов, и я хочу читать из POCO :: PipeInputStream. Мой вопрос: 1. Я знаю, что вызов std :: getline с блокирующим потоком блокируется, если данные не доступны. 2. какую функцию вызывать, чтобы проверить, доступны ли данные. 3. если НЕТ данных нет не собирается вызывать std :: getline, потому что он блокирует –
(это все еще отображается в результатах поиска.) См. мой ответ здесь: http://stackoverflow.com/a/42264216/1599699 – Andrew