[Gambas-user] gb3: how to check if event is pending execution before it triggers

Kevin Fishburne kevinfishburne at ...1887...
Sat Mar 17 09:58:09 CET 2012


On 03/17/2012 04:37 AM, Benoît Minisini wrote:
> Le 17/03/2012 08:46, Kevin Fishburne a écrit :
>> On 03/17/2012 03:05 AM, Bruce Bruen wrote:
>>> On Sat, 2012-03-17 at 02:04 -0400, Kevin Fishburne wrote:
>>>> Is there a way to check if an event is going to trigger in advance?
>>> Not in the known universe.  It would be nice though, Lotto numbers,
>>> stock price changes etc etc :-)
>>>
>>>> My startup procedure (GUI.Main) allows two event procedures to trigger,
>>>> Render.Screen_Draw (SDL) and Network.UDP_Read (UDP socket). When
>>>> Screen_Draw triggers I need to know if there are pending UDP packets so
>>>> I can avoid rendering the frame until those pending network events are
>>>> processed. The logic would look something like this:
>>>>
>>>> Public Sub Screen_Draw()
>>>>       If [there is data in the socket] Then Return
>>>>       [render a complete frame]
>>>> End
>>>>
>>>> Basically I need to give processing incoming UDP packets priority over
>>>> rendering frames since processing the packets is quick but rendering a
>>>> frame is slow. I only want it to render a frame when there are no
>>>> incoming UDP packets needing attention. I've been thinking about logical
>>>> ways to do this, but if there is some inherent GAMBAS way that would be
>>>> more elegant.
>>>>
>>> Could you use some global counter to achieve this?
>>> For every UDP packet received, inc the counter and dec it on UDP_Read
>>> (or zero it?)
>>> Then Screen_Draw need only check that the counter is zero.
>>>
>>> I don't really know whether this will work for you but from your
>>> description it does sound like a classic semaphore problem. ???
>> You're a funny guy. :) I need to control the order and priority of
>> rendering a frame and reading a UDP packet, and it appears that using
>> events takes this control completely out of my hands. I can easily have
>> the rendering event not actually do any rendering, but is there a way to
>> have a UDP read event similarly delay reading the UDP data for a later
>> time? Basically, when Network.UDP_Read triggers, can I just exit and let
>> it trigger again later when I'm ready to actually process it?
>>
> What happens if you use Lof() on the UDP socket to see if there is
> something to read?
>

Thanks, that is exactly what I need. One thing that is awesome about 
GAMBAS is the consistency in treatment of streams.

-- 
Kevin Fishburne
Eight Virtues
www: http://sales.eightvirtues.com
e-mail: sales at ...1887...
phone: (770) 853-6271





More information about the User mailing list