yet another thread question
- From: David Buchan <pdbuchan yahoo com>
- To: gtk-app-devel-list list <gtk-app-devel-list gnome org>
- Subject: yet another thread question
- Date: Thu, 5 Jul 2012 21:22:43 -0700 (PDT)
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.
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]