On 5 July 2012 14:26, David Buchan <pdbuc...@yahoo.com> wrote:
> Is there a way to have a (non-main iteration) thread issue a signal when it 
> ends?
>
> I start up a timeout and an idle function when I spawn a new thread.
> I want the main iteration to stop the timeout and idle function as soon as 
> the new thread is finished and disappears.

You can use g_idle_add() to send a message from the worker to the main thread.

The worker might end like this:

worker_thread( .. )
{
  ..
  final_bit_of_work();
  g_idle_add( thread_done_cb, myself);
  return NULL;
}

and the main thread cleans up and stops like this:

gboolean
thread_done_cb(Worker *worker)
{
  // unlink the main thread from the worker
  g_source_remove(worker->timeout_sid);

  // wait for the worker to finish
  g_thread_join(worker->gthread);

  // all done!
  worker_free(worker);

  return FALSE;
}

Or perhaps you mean something more complicated and I've misunderstood
:( I use semaphores for hairier thread synchronisation problems.

http://en.wikipedia.org/wiki/Semaphore_%28programming%29

I have a set of simple semaphore functions over the g_thread primitives:

https://github.com/jcupitt/libvips/blob/master/libvips/iofuncs/semaphore.c

John
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to