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