Re: Dialog boxes in seperate thread



Hmmm thats annoying. In this case the thread needs to pause and wait for user input so triggering the dialog in the root thread would allow the worker thread to continue without the required user input.
Thanks for your help
Dave

Dave Conley
Programmer
Free Radical Design
http://www.frd.co.uk

On Wed, 30 Apr 2008, jcupitt gmail com wrote:

2008/4/30 David Conley (FRD) <dconley frd co uk>:
Are modal dialog boxes possible in threads? I have this call in a thread
 seperate to the main gtk thread:

 gtk_dialog_run(GTK_DIALOG(errorDialog));

 and obviously that locks that thread while the main thread continues but
 nothing updates the display in the blocked thread and the app becomes
 unresponsive.

GTK is happiest if you keep all gtk_* calls in the main thread, and if
the main thread does (almost) nothing but run the gtk event loop.

If you need to start a thread to do a long running task, don't call
gtk stuff from the thread, instead send a message to the main thread
and ask it to make the calls on the thread's behalf. This is easy to
do with g_idle_add(), which you can call safely from a worker thread.

Something like:

on_button_click( ..
{
 if (!app->bg_job)
   app->bg_job = g_thread_create( background_job ..
}

background_job ( ..
{
 for (int i = 0; i < 100; i++) {
   char *str = g_strdup_printf ("... still working! %d", i);
   g_idle_add (process_message, str);
   sleep (1)
 }
}

process_message (.. char *str)
{
 gtk_label_set (app->status, str);
 g_free (str);
}

John





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]