20100814 gtk多线程个人记录

两次用到线程编程了,从以前的害怕,畏惧,不知如何下手,不敢下手,到现在知道,它是可以学会的,多谢邓的鼓励。

小小的记录,个人之用:

用到的两个地方:

第一:定时器原来的思路,定时器到时,要弹出对话框的同时发出声音,如果两个函数,依次放置在定时器回调函数里面,那么要么,声音放完之后,在弹出对话框,要么,弹出对话框,等待用户点击对话框上按钮,取消对话框,方才发出声音,两种都不可以。

那么,解决方法:原来以为,定义两个线程,作为定时器的回调函数,其实不是这样子,是在定时器的回调函数中,弹出对话框,同时,在弹出对话框的代码之前,定义一个线程,即主线程弹出对话框,其又创建一个子线程来发出声音。

第二:定时器思路改变,使用1分钟定时器。那么在循环遍历链表的时候,要对需要做出提醒的节点,调用函数弹出对话框,进行提醒,原来做法是简单的在if中调用一个函数,生成对话框,发现,出现一个很大的问题,弹出对话框之后,这个函数暂停列,也就是说,不再往下进行,也就是说,不仅不返回TRUE使得1分钟定时器继续循环扫描,甚至,本次扫描,也不对后续节点进行扫描了,如此,只能创建一个线程,弹出对话框,事实证明,问题得解。

 

GTK多线程编程框架:

首先在主main函数之前后,加入这两行

    gdk_threads_enter();
    gtk_main ();                //进入主窗口循环
    gdk_threads_leave();

 

在主线程函数中,要作如下操作

  if(!g_thread_supported()) g_thread_init(NULL);
  gdk_threads_init();
  g_thread_create(qwq_psnplan_remind_reminding,btq,FALSE,NULL);//调用函数进行提醒

生成子线程,(函数qwq_psnplan_remind_reminding)

同时在函数qwq_psnplan_remind_reminding 中

代码开始前加入gdk_threads_enter();

代码结束之后加入gdk_threads_leave();

 

 

 另外一种定时器思路:(秦师兄思路)

假设半个小时内有三个欲提醒事件,A:12分钟;B:9分钟 ;C:5分钟

那么设5分钟定时器,到时了,提醒C,再设4分钟定时器,到时提醒B,再设3分钟定时器,始终只有一个定时器

你可能感兴趣的:(thread,多线程,编程,null,2010,gtk)