2011-06-07 84 views
2

我在我的程序中有線程,我想把字符放入流並在另一個線程中讀取,但在std :: cin.putback()之後我需要從鍵盤寫入某些東西來喚醒main函數中的std :: cin。我能做些什麼來自動閱讀嗎?std :: cin.putback()和「喚醒」它

回答

3

這不是流如何工作。該std::cin讀取來自你的程序的標準輸入外數據和putback只允許保留一個字符,你實際上只是讀回緩衝區重新解析下次調用operator>>(或getgetline或其他讀法)。

如果要在線程之間進行通信,則應使用某個線程庫中的消息隊列,例如, Boost提供了一個體面的便攜式之一。

這是不可能使用流,至少那些由標準庫提供的,因爲stringstream不是線程安全的,fistream/fostream不能從原始文件句柄創建的,所以你不能將它們與POSIX相結合pipe功能。將一個消息隊列封裝在一個流中是可能的(並且boost可以爲你提供足夠的工具),但是原始消息隊列API可能是合適的。