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

GUI Locks with gthreads



Hi all

I have a problem with my GUI and gthreads.

I have two threads: one reads data from the database
and puts them into a buffer. Other reads the buffer
and updates some gtklabels.

My application (GUI) locks after a few minutes.  I do
not know what I am doing wrong.

I put some of my code:

//Here I created the threads
g_thread_create(consultar_valores_ciclo,NULL,FALSE,NULL);
g_thread_create(actualizar_valores_ciclo,NULL,FALSE,NULL);

//Here is the consultar_valores_ciclo function
static void consultar_valores_ciclo()
{
	GThread* self=NULL;
	gchar *aux1=NULL;
	gint mic;
	while (1)
	{
		g_mutex_lock(gmx);
		if (zfin==0)
		{
				if (gmx != NULL)
				{
					consultar_valores();	//reads data from db
					g_timer_reset(zparo);
					g_timer_start(zparo);
					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)
		{
			self = g_thread_self();
			g_mutex_unlock(gmx);
			g_thread_exit(self);
		}
		g_mutex_unlock(gmx);
	}
}


//Here is the actualizar_valores_ciclo function
static void actualizar_valores_ciclo()
{
	GThread* self=NULL;
	gchar *aux1=NULL;
	gint mic=0;
	while (1)
	{
		g_mutex_lock(gmx);
		if (zfin==0)
		{
				if (gmx != NULL)
				{
					actualizar_valores();
					g_timer_reset(zparo);
					g_timer_start(zparo);
					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)
		{
			self = g_thread_self();
			g_mutex_unlock(gmx);
			g_thread_exit(self);
		}
		g_mutex_unlock(gmx);
	}
}


I also put the code :

  gdk_threads_enter();
  gtk_main();
  gdk_threads_leave();

I also put this code :

 gdk_threads_enter();
	label =
lookup_widget(GTK_WIDGET(toplevel),"label_name");
	gtk_label_set_text(GTK_LABEL(label), "whatever");
  gdk_threads_leave();



Thanks in advance and best regards


boricles


P.D. Sorry my poor english



___________________________________________________
Yahoo! Messenger - Nueva versión GRATIS
Super Webcam, voz, caritas animadas, y más...
http://messenger.yahoo.es



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