<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 9pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Hi Ross,<BR>
&nbsp;<BR>
Maybe you have misunderstood, In fact my "HasItemForH264" variable is set in&nbsp;another&nbsp;thread - the one that handles your H.264 encoding(I mentioned it <BR>
&nbsp;<BR>
in my code).<BR>
&nbsp;<BR>
My problem is "HasItemForH264" variable is set to be non-zero in another thread, but event loop seems not respond immediately, it&nbsp;delay some time ,then<BR>
&nbsp;<BR>
implemented "deliverFrame".<BR>
&nbsp;<BR>
My purpose is implementing the "deliverFrame" as soon as possible when "HasItemForH264!=0".<BR>
&nbsp;<BR>
Thanks for your help :)<BR>
&nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR><BR><BR><BR><BR><BR>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #008080 2px solid; MARGIN-RIGHT: 0px">
<HR id=EC_stopSpelling>
Date: Thu, 1 Feb 2007 08:57:20 -0800<BR>To: live-devel@ns.live555.com<BR>From: finlayson@live555.com<BR>Subject: Re: [Live-devel] "no-blocking fashion" in doGetNextFrame()<BR><BR>
<META content="Microsoft SafeHTML" name=Generator>
<STYLE>
.ExternalClass blockquote, .ExternalClass dl, .ExternalClass ul, .ExternalClass ol, .ExternalClass li
{padding-top:0;padding-bottom:0;}

</STYLE>

<BLOCKQUOTE>In doGetNextFrame() member fuction of DeviceSource, I want to call "deliverFrame" in a non-blocking fashion,<BR>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE>I wrote my code <A href="http://lists.live555.com/pipermail/live-devel/2005-September/003276.html" target=_blank>(follow the example</A> <A href="http://lists.live555.com/pipermail/live-devel/2005-September/003276.html.)" target=_blank><FONT color=#800080><U>http://lists.live555.com/pipermail/live-devel/2005-September/003276.<SPAN></SPAN>html</U></FONT></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;//Ha<SPAN></SPAN>sItemForH264 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();</BLOCKQUOTE>
<BLOCKQUOTE>&nbsp;&nbsp;}</BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>The problem with this is that - if no new data is currently available - you will be executing the event loop forever, but the "HasItemForH264" will never get set, because nothing will ever call "deliverFrame()".</DIV>
<DIV><BR></DIV>
<DIV>Instead, the solution is for your *other* thread - the one that handles your H.264 encoding - to be the one that sets the "HasItemForH264" variable.</DIV>
<DIV><BR></DIV>
<BLOCKQUOTE>&nbsp;&nbsp; usleep(100);</BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>Don't do this - it will delay the whole application for 100ms, and nothing else will get done during this time.</DIV><PRE>-- 
</PRE>
<DIV><BR>Ross Finlayson<BR>Live Networks, Inc.<BR>http://www.live555.com/</DIV></BLOCKQUOTE><br /><hr />通过 Windows Live Messenger 表达您自己! <a href='http://get.live.com/messenger/overview' target='_new'>Windows Live Messenger!</a></body>
</html>