> > Here's another suggestion (line numbers may be a little off). > The only difference to Reinhard's patch is that the sleep is done > outside the locked area. > > Klaus > > > > --- dvbplayer.c 2005/01/14 14:00:56 1.30 > +++ dvbplayer.c 2005/05/08 14:40:48 > @@ -370,9 +372,14 @@ > > nonBlockingFileReader = new cNonBlockingFileReader; > int Length = 0; > + bool Sleep = false; > > running = true; > while (running && (NextFile() || readIndex >= 0 || > ringBuffer->Available() || !DeviceFlush(100))) { + if (Sleep) { > + cCondWait::SleepMs(3); // this keeps the CPU load low > + Sleep = false; > + } > cPoller Poller; > if (DevicePoll(Poller, 100)) { > > @@ -380,8 +387,8 @@ > > // Read the next frame from the file: > > - if (!readFrame && (replayFile >= 0 || readIndex >= 0)) { > - if (playMode != pmStill) { > + if (playMode != pmStill && playMode != pmPause) { > + if (!readFrame && (replayFile >= 0 || readIndex >= 0)) { > if (!nonBlockingFileReader->Reading()) { > if (playMode == pmFast || (playMode == pmSlow && > playDir == pdBackward)) { uchar FileNumber; > @@ -438,16 +445,16 @@ > break; > } > } > - else > - cCondWait::SleepMs(3); // this keeps the CPU load low > - } > > - // Store the frame in the buffer: > + // Store the frame in the buffer: > > - if (readFrame) { > - if (ringBuffer->Put(readFrame)) > - readFrame = NULL; > + if (readFrame) { > + if (ringBuffer->Put(readFrame)) > + readFrame = NULL; > + } > } > + else > + Sleep = true; > > // Get the next frame from the buffer: > This works too. S.