Re: trouble with terminating pthreads in GTK

Hi Shao,

> I am writing a GTK app which plots some graph from realtime data.
> When the start button is pressed in this app, it creats two threads, one
> is for reading the input and one is for drawing the graph.
> pthread_create(&input_pid, NULL, read_input, NULL);
> pthread_create(&draw_pid, NULL, draw_thread, NULL);
> The drawing thread looks something similar to this:
> void *draw_thread(void *arg)
> {
>     pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
>     while (terminate_cond==FALSE) {
>         /* some code here to wait for a drawing signal
>          * to update the graph
>          */
>          pthread_mutex_lock(blah...)
>          pthread_cond_wait(blah...)
>          pthread_mutex_unlock(blah...)
>          /* !!! Sometimes, this thread failed to terminate
>           * and hangs here
>           */
>          gdk_threads_enter();
>          draw();    /* all the drawing code go in this function */
>          gdk_threads_leave();
>     }
> }
> However, I am having some trouble to terminate this drawing thread when
> the stop button is pressed. I use this to terminate the drawing thread;
>     pthread_cancel(draw_thread);
> I guess this is a deadlock situation between the drawing thread and the
> GTK's main thread, but I don't know how to resolve this. Your help would
> be much appreciated.

The solution is quite simple. Don't use thread cancelation (which is a bogus
thing anyway). Just do it with 'terminate_cond' as you already do and make
draw() either looking at terminate_cond as well or only running very short
periods of time.

Sebastian Wilhelmi                   |            här ovanför alla molnen
mailto:wilhelmi ira uka de           |     är himmlen så förunderligt blå   |

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