[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: timeout function not called
- From: James Scott Jr <skoona verizon net>
- To: v_wishful sandiego com
- Cc: gtk-app-devel-list gnome org
- Subject: Re: timeout function not called
- Date: Thu, 04 Oct 2007 23:24:55 -0400
On Thu, 2007-10-04 at 13:27 -0700, v_wishful sandiego com wrote:
> Thanks James for giving me my first experience with Thread programming!
> I tried the code you sent me, but unfortunately, I still can't get the
> progress_update
> function to run, looks like it never gets called. Any idea why this
> might be happening?
> growPart still runs.
>
> Thanks,
>
> Vicki
>
The code i offered is really high level - almost sudo code. I prefer to
evaluate a fuller example, if you care to post the whole program - or
email it to me and I will email it back.
Things I would be interested in would be as follows;
1. did you do away with the fork() and wait() calls?
2. did you compile it with something like this - with gthread included?
"# gcc -Wall `pkg-config --libs --cflags gtk+-2.0 glib-2.0
gthread-2.0` program.c "
3. Did you call g_thread_init() in main(). ?
/*
* Initialize GLib thread support and GTK
*/
g_type_init ();
g_thread_init (NULL);
gdk_threads_init ();
gtk_init (&argc, &argv);
/* create app window */
/* create progress bar dialog */
/*
* enter the GTK main loop
*/
gdk_threads_enter ();
gtk_main ();
gdk_flush ();
gdk_threads_leave ();
return (0);
4. How long does growPart() run? longer than 100ms
the g_timeout_add() is only for 50ms, and it waits 50ms before
making the first call kinda short, try 250 or 400
5. Assuming your created a dialog box for the progress bar and thats is
is visible it should have ran. Stick a g_debug("update"); in the
progress_update() routine after the call to gtk_progress_bar_pulse()
6. I'm thinking the most likely cause is how the program was compiled.
send me some code to look at!
James,
>
> [Hide Quoted Text]
> GTK program before. The ret=wait(null) causes execution to stop at that
>
> point and wait for growPart() to finish. A way to get around the
> logistics of fork() is to use threads directly. Consider the following;
>
> /* globals */
> gboolean b_pulse_control = FALSE
> GThread *grow_thread_id = NULL;
> gint global_ret = 0;
>
>
> b_pulse_control = TRUE;
> timer = g_timeout_add(50, (GSourceFunc) progress_update,
> (gpointer)progressbar);
>
> grow_thread_id = g_thread_create ( growPart_thread, &b_pulse_control,
> TRUE, NULL);
>
>
> static gboolean progress_update (gpointer progressbar)
> {
> if (b_pulse_control)
> {
> gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progressbar));
> return true;
> } else {
> global_ret = GPOINTER_TO_INT( g_thread_join (grow_thread) );
> return FALSE;
> }
>
> }
>
> static gpointer growPart_thread(gpointer b_pulse)
> {
>
> /* do work */
> growPart();
>
> *b_pulse = FALSE;
> g_thread_exit( GINT_TO_POINTER( 1 ) );
>
> }
>
> I would do the passing of control values via a structure to avoid the
> use of globals,
> but this should work for you.
>
>
> ------------------------------------------
> Invent your own San Diego at sandiego.com!
>
>
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]