<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 9pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Hi,<BR>
&nbsp;<BR>
In doGetNextFrame() member fuction of DeviceSource, I want to call "deliverFrame" in a non-blocking fashion,<BR>
&nbsp;<BR>
I wrote my code <SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><A href="http://lists.live555.com/pipermail/live-devel/2005-September/003276.html">(follow the example <U><FONT color=#800080><A href="http://lists.live555.com/pipermail/live-devel/2005-September/003276.html.)">http://lists.live555.com/pipermail/live-devel/2005-September/003276.html</FONT></U></A></SPAN>.)</A><BR>
&nbsp;<BR>
It works,but another problem came out: it returns immediately when "watchVarible==0"(no data is currntly available),<BR>
&nbsp;<BR>
but it still wait&nbsp;a long time&nbsp;even "watchVarible" already became non-zero.<BR>
&nbsp;<BR>
My purpose is implementing the "deliverFrame" as soon as possible when "watchVarible!=0".<BR>
&nbsp;<BR>
Could anyone help me? Thanks very much!<BR>
&nbsp;<BR>
Here is my code:<BR>
&nbsp;<BR>
void DeviceSource::doGetNextFrame()<BR>&nbsp;{<BR>&nbsp;<BR>
envforH264-&gt;taskScheduler().doEventLoop(HasItemForH264);&nbsp;//HasItemForH264 is set non-zero&nbsp;in another thread&nbsp;after it&nbsp;filled the buffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deliverFrame();<BR>&nbsp;&nbsp;}<BR>
&nbsp;<BR>
&nbsp;<BR>
<BR>void&nbsp; DeviceSource::deliverFrame()<BR>{<BR>&nbsp;&nbsp;<BR>&nbsp; if (!isCurrentlyAwaitingData()) return; // we're not ready for the data yet<BR>
&nbsp;<BR>
pthread_mutex_lock(mutexforH264);<BR>
&nbsp; if(*HasItemForH264==99)<BR>&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; fFrameSize=*LengthForH264;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //LengthForH264 is defined in another thread&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fFrameSize &gt; fMaxSize) {<BR>&nbsp;&nbsp;&nbsp;fNumTruncatedBytes = fFrameSize - fMaxSize;<BR>&nbsp;&nbsp;&nbsp;fFrameSize = fMaxSize;<BR>&nbsp;&nbsp; &nbsp;}<BR>
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(fTo, BufferForH264, fFrameSize);&nbsp;&nbsp;&nbsp;&nbsp; //BufferForH264 is defined in another thread<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * HasItemForH264=0;<BR>
<BR>&nbsp;&nbsp;&nbsp; <BR>
&nbsp; }<BR>&nbsp;pthread_mutex_unlock(mutexforH264);&nbsp; <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; usleep(100);<BR>
&nbsp; <BR>&nbsp;// After delivering the data, inform the reader that it is now available:<BR>&nbsp; <BR>
FramedSource::afterGetting(this);<BR>&nbsp; <BR>printf ("deliverFrame() is end !\n");<BR>}<BR>
&nbsp;<BR><br /><hr />通过 Windows Live Messenger 表达您自己! <a href='http://get.live.com/messenger/overview' target='_new'>Windows Live Messenger!</a></body>
</html>