Du musst das Einlesen ja immer noch unterbrechen; im Zweifel wirste dafür threaden müssen. Im Standard gibt es zwar leider keine entsprechende Funktionalität, aber zum Glück gibt's ja boost. Man könnte das ganze mit boost.thread etwa so anfangen:
C++:
#include <boost/thread.hpp>
#include <iostream> #include <string>
class read_thread { public: read_thread(std::string &dest) : dest_(dest) { }