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

Benoît Minisini gambas at ...1...
Sat Mar 17 09:37:43 CET 2012


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?

-- 
Benoît Minisini




More information about the User mailing list