[vox-tech] Xlib event loop

Julie Russell vox-tech@lists.lugod.org
Fri, 19 Dec 2003 13:51:10 +1100


Hi there,

What I am doing is I am calling XPutImage from a threaded output class, and
I want to keep it there for 20 seconds, then grab the next image, etc.
However, these images can be interrupted by a keypress event, so while they
are showing, I need to still get events from the event loop. I have my event
handler as a non-threaded singleton class that can just be called when an
event needs to be sent. The images sit on a child window, and the event
handler listens to the parent. Should sleep on a child window of a detached
thread class stop the event loop on the parent? Could it be from what you're
saying that the XImage output is blocking the XEvent? If the sleep process
if blocking it, then I would have to determine another way to count 20
seconds for the blit.

Thanks,
Julie.

> -----Original Message-----
> From: vox-tech-admin@lists.lugod.org
> [mailto:vox-tech-admin@lists.lugod.org]On Behalf Of R. Douglas Barbieri
> Sent: Friday, 19 December 2003 1:14 PM
> To: vox-tech@lists.lugod.org
> Subject: Re: [vox-tech] Xlib event loop
>
>
> On Fri, Dec 19, 2003 at 11:47:00AM +1100, Julie Russell wrote:
> > Hi Everyone,
> >
> > I am programming in c++ and xlib using common c++ threads. I
> want to sleep a
> > thread (which I have initiated as detached). During that
> process I want to
> > recieve events from the xlib event loop and if triggered, interrupt the
> > sleeping thread, or if not interrupted, have the thread wake up
> on it's own
> > after 20 seconds. The problem is, while that thread is asleep, for some
> > reason, my event loop appears to be blocked. How can I sleep a thread so
> > that the loop doesn't block and then interrupt it cleanly. Why
> does the xlib
> > event loop appear to be blocked during this process.
>
> I can think of how I would do this in Win32 There is a API function
> called PeekMessage() which "peeks" at the pending message waiting but
> does not block. I would use that, but for sleeping the thread, use
> WaitOnMultipleObjects().
>
> So, if there is a similar function for xlib which allows just a "peek,"
> I would use it instead so that the thread doesn't block there. Then
> use the pthread_cond_timeout() function to sleep. A signal to the
> conditional object terminates the thread loop then.
>
> I read somewhere that X likes all X-related calls to happen in just one
> thread. It could be that when you read the next event, it blocks because
> there is other X activity in the other thread? Just a guess, really.
>
> >
> > Thanks in advance,
> > Julie.
> >
> >
> >
> > _______________________________________________
> > vox-tech mailing list
> > vox-tech@lists.lugod.org
> > http://lists.lugod.org/mailman/listinfo/vox-tech
>
> --
> R. Douglas Barbieri
> doug@dooglio.net
> http://www.dooglio.net
>
> GPG Fingerprint : FE6A 6A57 2B95 7594 E534  BFEE 45F1 9E5E F30A 8A27
> MIT.edu recv-key: C55B91D4
> GPG Public key  : http://www.dooglio.net/dooglio.asc
>