When the user presses a button, an idle function is begun to watch a flag which 
will tell it a message has been left in a string for it by a worker thread. The 
worker thread is then started. It will produce results to be displayed in a 
textview by the idle function. When the worker thread has results, it puts them 
into the string and sets the message_available_flag. The idle function sees the 
flag set, prints the results to the textview, and then clears the 
message_available_flag.

But my problem is that the worker thread is really fast at producing results to 
be displayed and the idle function sometimes misses messages.

Is there a way to cause my worker thread to pause while the idle function 
finishes putting the message in the textview?

I first thought of putting something like this into the worker thread just 
before it sets the message_available flag and puts new results into the string:
=================================
for (;;) {
  G_LOCK (message_available_flag);
  if (message_available_flag == 0) break;   // Last message has been sent to 
textview, idle func is ready for another.
  G_UNLOCK (message_available_flag);
}

and then we do the following

put new message in message string;

G_LOCK (message_available_flag);
message_available_flag = 1;
G_UNLOCK (message_available_flag);
=================================

But this locks-up because (I think) the G_LOCK mutex isn't letting the idle 
loop get a chance to clear the flag from printing a previous message.

The idle function never alters the string in any way. It's up to the worker 
thread to clear it each time it needs to put a new message into the string.
_______________________________________________
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