[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: how to process only some GTK events and leave the others in the queue
- From: "Tristan Van Berkom" <tvb gnome org>
- To: "Francesco Montorsi" <f18m_cpp217828 yahoo it>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: how to process only some GTK events and leave the others in the queue
- Date: Sun, 28 Dec 2008 10:17:27 -0500
On Sun, Dec 28, 2008 at 6:45 AM, Francesco Montorsi
<f18m_cpp217828 yahoo it> wrote:
> Hi,
> is it possible to process only some specific events from the GTK/GDK event
> queue and leave the others in the queue so they can be processed later by
> the main loop?
>
> I'll try to explain it better: I have a GTK-based app which runs the
> gtk_main() in its void main().
> However at a certain point (e.g. upon user click on a GtkButton), I need to
> perform a long computation. I don't want to use a secondary thread; rather
> I'd like to do everything from the main thread. To avoid blocking the GUI of
> my app during the computation, I call from time to time:
>
> while (gtk_events_pending() != 0)
> gtk_main_iteration();
>
> to process the pending events in the queue. However now I'd like to process
> only _some_ of the events of the queue, and leave the others in the queue
> itself.
>
> Is it possible?
Hi, for some odd cases you can use:
http://library.gnome.org/devel/gdk/stable/gdk-Events.html#gdk-event-put
i.e. by pumping the events out of the event queue yourself, and putting the
ones you didnt process back.
I doubt this is what you need, I think that removing the while
(gtk_events_pending())
code all together and replacing it with more returns to the event
loop, and shorter
iterations in timeouts and signal callbacks - will probably fix
whatever problems
you are having.
i.e. save an iterator position and process only a few iterations every time
the idle handler you install is called, when the loop is finally
finished then signal that
your computation is finished.
You can also push a progress bar and set your UI insensitive for the duration
of the process this way.
Cheers,
-Tristan
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]