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

Re: GUI Locks with gthreads



> Hi all

Hi! ;)

> I have a problem with my GUI and gthreads.

[...]

Check this:

> 		g_mutex_lock(gmx);
> 		if (zfin==0) {
> 		{
> 				if (gmx != NULL)
> 				{

> 					zini=g_timer_elapsed(zparo,NULL);
> 					while(zini==0 && zfin==0)
> 					{
> 						zini=g_timer_elapsed(zparo,NULL);
> 					}
> 					g_timer_stop(zparo);
> 					zini=0;
> 					if(zfin==1)
> 					{
> 						self = g_thread_self();
> 						g_mutex_unlock(gmx);
> 						g_thread_exit(self);
> 					}
> 				}
> 		}
> 		if(zfin==1)

<<< Why not an "else"? If you enter this one it's because you haven't 
entered into the other.

> 		{
> 			g_mutex_unlock(gmx);
> 			g_thread_exit(self);
> 		}
> 		g_mutex_unlock(gmx);
> 	}
> }

I'll suggest to make a simple "wait" for a few miliseconds, just to let 
the second process run a little. It's something I found in my 
multithreading program (maybe some Linux guru can help to this?)

When you have two threads that are into a "while(1)", you think they will 
run 1-2-1-1-2-1-2-2-2-1-1-2-1-2-1-2-1-1-2.... but the reality is 
"1-1-1-1-1-1-1-1-2-2-2-2-2-2-2-2-2-1-1-1-1-1-1". If you add a little wait 
(wait 20 miliseconds) just after the mutex_unlock, it will be 
1-2-1-2-1-2-1-2 (at least that's what it happens with my program).

By the way, who sets the Zfin flag to "1"? I haven't found. Is there a 
third thread? Are you using "zini" in 
zini=g_timer_elapsed(zparo,NULL);
when you want "zfin"?

.-:Namarie:-.



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