当前位置: 技术问答>linux和unix
GTK使用空闲处理函数解决线程同步时出现的一个诡异现象
来源: 互联网 发布时间:2016-08-10
本文导语: //在关联界面事件时设置空闲处理函数 gtk_idle_add( (GtkFunction) func_idle,NULL); //初始化互斥量 pthread_mutex_t netlink_queue_mutex = PTHREAD_MUTEX_INITIALIZER; //空闲处理函数 void func_idle() { printf("aaaaaaaaaaan"); pthread_mutex_lock(&netlink_...
//在关联界面事件时设置空闲处理函数
gtk_idle_add( (GtkFunction) func_idle,NULL);
//初始化互斥量
pthread_mutex_t netlink_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
//空闲处理函数
void func_idle()
{
printf("aaaaaaaaaaan");
pthread_mutex_lock(&netlink_queue_mutex);
//do_something
pthread_mutex_unlock(&netlink_queue_mutex);
printf("bbbbbbbbbbbn");
}
诡异现象:
如此,可以正常执行,
但是,若屏蔽printf("bbbbbbbbbbbn");
空闲处理函数就只能执行一次,能正常退出,不阻塞其他界面事件的处理
请问各位高手,这是为何?
gtk_idle_add( (GtkFunction) func_idle,NULL);
//初始化互斥量
pthread_mutex_t netlink_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
//空闲处理函数
void func_idle()
{
printf("aaaaaaaaaaan");
pthread_mutex_lock(&netlink_queue_mutex);
//do_something
pthread_mutex_unlock(&netlink_queue_mutex);
printf("bbbbbbbbbbbn");
}
诡异现象:
如此,可以正常执行,
但是,若屏蔽printf("bbbbbbbbbbbn");
空闲处理函数就只能执行一次,能正常退出,不阻塞其他界面事件的处理
请问各位高手,这是为何?
|
还有,一定要有return true or false,我的代码
gboolean func_idle()
{
printf("aaaaaaaaaaa%dn",flag);
pthread_mutex_lock(&netlink_queue_mutex);
g_usleep(1000);
flag++;
pthread_mutex_unlock(&netlink_queue_mutex);
// g_print("bbbbbbbbbbb%dn",flag);
// if(flag>10)
// return false;
return true;
}
gboolean func_idle()
{
printf("aaaaaaaaaaa%dn",flag);
pthread_mutex_lock(&netlink_queue_mutex);
g_usleep(1000);
flag++;
pthread_mutex_unlock(&netlink_queue_mutex);
// g_print("bbbbbbbbbbb%dn",flag);
// if(flag>10)
// return false;
return true;
}