Untested but uses less variables.
unsigned long interval = 3000; //delay
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long currentMillis = millis(); // Get current time
while ((millis() - currentMillis) < interval) // Has interval expired?
{
while (Serial.available() > 0) // Any serial data arrived?
{
byte value = Serial.read(); // read and discard it
}
}
// Interval is up so next serial read is wanted
}