Собственно, программа должна выполнять задачу, зависящую от поступающих по мере работы данных. При этом - если новых данных нет - то она не должна прерывать выполнение(читай - работать со старыми).
То есть что-то типа :
Data* data;
while(...) {
task(data);
if (! stdinEmpty()) {
readData(data);
}
}