Re: trouble with terminating pthreads in GTK
- From: Sebastian Wilhelmi <wilhelmi ira uka de>
- To: Shao Zhang <shaoz cse unsw edu au>
- Cc: gtk-list gnome org, gtk-app-devel-list gnome org
- Subject: Re: trouble with terminating pthreads in GTK
- Date: Mon, 23 Oct 2000 10:19:13 +0200
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.
Bye,
Sebastian
--
Sebastian Wilhelmi | här ovanför alla molnen
mailto:wilhelmi ira uka de | är himmlen så förunderligt blå
http://goethe.ira.uka.de/~wilhelmi |
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]