std :: cin.putback () и "разбудить" его - PullRequest
2 голосов
/ 07 июня 2011

В моей программе есть потоки, и я хочу поместить символ в поток и прочитать его в другом потоке, но после std :: cin.putback () мне нужно написать что-то с клавиатуры, чтобы "разбудить" std :: cinв функции main.Могу ли я сделать что-нибудь для автоматического чтения?

1 Ответ

3 голосов
/ 07 июня 2011

Это не так, как работают потоки.std::cin считывает данные, поступающие извне вашей программы, на стандартный ввод, а putback позволяет сохранить только символ , который вы на самом деле просто прочитали , обратно в буфер для повторного анализа при следующем вызове operator>> (или get или getline или другой метод чтения).

Если вы хотите общаться между потоками, вам следует использовать очередь сообщений из некоторой библиотеки потоков, например, Boost предоставляетнеплохой переносимый.

Невозможно использовать потоки, по крайней мере те, которые предусмотрены стандартной библиотекой, потому что stringstream не является поточно-ориентированным и fistream / fostream не может быть создан издескриптор необработанного файла, поэтому вы не можете объединить их с функцией POSIX pipe.Можно было бы обернуть очередь сообщений в поток (и boost дает вам достаточно инструментов для этого), но API сырой очереди сообщений, вероятно, подойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...