Am Montag, den 11.02.2008, 18:19 -0500 schrieb Jacques Pelletier: > On February 11, 2008 05:37:54 pm Vallone, Anthony wrote: > > From: > > "Vallone, Anthony" <[EMAIL PROTECTED]> > > To: > > [email protected] > > Myself, I avoid the enter/leave calls in favor of g_idle_add() as a > > mechanism to queue all gui calls for the main event loop thread. Let > > your other threads stick to performing the non-gui work, and you'll save > > yourself from many headaches. (I wish someone told me that 3 years ago). > > Hi, > > I'm interested to know more about that. Is there some source code example > that > I can follow?
The pattern goes like this:
if (!g_thread_create (background_worker, job_data, joinable, &error))
{
report_error (error);
return;
}
....
static gpointer
background_worker (gpointer data)
{
JobStruct *job = data; /* extract job description from data */
/* do everything you like, EXPECT touching widgets */
g_idle_add (report_progress, progress_data);
/* still do what your want, EXPECT touching widgets */
return result;
}
....
static gboolean
report_progress (gpointer data)
{
ProgressData *progress = data; /* extract progress from data */
MamanBar *ui = progress->ui; /* retreive UI handle */
gtk_label_set_text (GTK_LABEL (ui->progress_label), progress->text);
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (ui->progress_bar),
progress->fraction);
/* UI has been update. Do not call this function again, unless
* new progress happend. In this case the function is re-added
* to the idle queue with g_idle_add().
*/
return FALSE;
}
Ciao,
Mathias
--
Mathias Hasselmann <[EMAIL PROTECTED]>
Openismus GmbH: http://www.openismus.com/
Personal Site: http://taschenorakel.de/
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
_______________________________________________ gtk-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtk-list
