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




