Re: Proper way to provide gtk+ app with asynchronous data?
- From: John Cupitt <jcupitt gmail com>
- To: "Dmitry M. Shatrov" <zzidre mail ru>
- Cc: gtk-list gnome org
- Subject: Re: Proper way to provide gtk+ app with asynchronous data?
- Date: Fri, 9 Jul 2004 11:33:03 +0000
On Thu, 08 Jul 2004 21:47:41 +0400, Dmitry M. Shatrov <zzidre mail ru> wrote:
> Ok, gdk_threads_enter/leave is the way, but before coding it I'd like to
> figure out if this could be done in a message-oriented manner,
> not in cross-locking one.
My app does this with pipes. I have a GUI thread and a pool of worker
threads producing (in my case) pixel data. As the workers produce
data, it gets painted asynchronously to the screen.
I don't use the threads enter/leave stuff (it's much too annoying and
fragile, in my opinion). Instead I have all gtk stuff in the main GUI
thread and have a pipe which workers can post pointers down. The GUI
thread uses gtk_input_add() so that it gets woken up when data arrives
from the pipe.
worker:
- down() on semaphore for this thread
- do some work, generating a struct of data
- write pointer to struct to a pipe
- loop
GUI:
- callback triggered when a pointer arrives down the pipe
- read struct of data and paint screen (struct includes link to thread
that made it)
- up() on semaphore for thread to restart it
Very simple and easy to program. I'm assuming writing 4 bytes to a
pipe is atomic, I guess. I've not had problems (even on SMP machines),
but it would be easy to add a global mutex for the pipe writers.
John
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]