Hi.

My program has a main loop in which other libraries call their own select().
In order to make this call non-blocking, for each of these selects I use a 
timeout of 0 seconds, and I make a very short pause (about 3 milliseconds) 
beetween each loop cycle so to avoid a CPU heavy load.
In addition, I have subclassed TaskScheduler so to have the live555's looper 
inside the main loop; the result is something like this:

for(;;)
{

  library1SingleStep();
  library2SingleStep();
  live555SingleStep();
  pause(3 millisecs);
}

Now, in order to make the live555SingleStep() return immediately (so to avoid 
blocking the program when events don't occour), I have added a dummyTask which 
wakes up the MyTaskScheduler every 0 seconds.
Then I have created MyFramedSource which basically performs the following 
actions:


void MyFramedSource::doGetNextFrame() 
{
  .
  .
  if(frameAvailable)
    deliverFrame();
  else
    envir().taskScheduler().scheduleDelayedTask(0, 
MyFramedSource::afterGettingFrame, this);
}


void MPEG4FrameSource::afterGettingFrame()
{
  doGetNextFrame();
}


Now: if the MyTaskScheduler manages only one instance of MyFramedSource all 
seems ok (and the stream flows well) . But when there are other instances, the 
streams are very discontinous.
Therefore I ask:

1) can the above solution (SingleStep() + periodic dummyTask of 0 seconds + 
pause() between each cycle ) work if well managed? (I just need: yes/no)
2) could the line  envir().taskScheduler().scheduleDelayedTask(0, 
MyFramedSource::afterGettingFrame, this) cause that the scheduler is called too 
many times (therefore the reason of my problem)?
3) How can I manage the case in which I have multiple selects? I want to avoid 
threads, if possible....

thanks in advance for your reply


      
_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to