LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 707|回复: 1

gtk+2.0多线程求助!

[复制链接]
发表于 2008-12-19 09:18:22 | 显示全部楼层 |阅读模式
各位版上大哥牛人,请教关于GTK多线程的问题。
我现在想实现:开关按钮(toggle button) 来实现录音和保存功能,即开光按钮按下,开始录音(录音是一个实时的过程,不停地进行,需要开关按钮弹起时终止);开关按钮弹起,终止录音,开始保存成其他格式文件。
我是在录音中加入线程,利用一个全局的标志来终止线程,这个全局的标志,需要开关按钮的控制。
现在遇到的问题是:一旦进入线程,开关按钮便不能正常工作,即不能点击,灰在那里。

程序如下:
int signal = 0;
void fm_record( void )
{
        while(signal ){
                g_usleep(1);
                gdk_threads_enter();
                while (1 ){
                        g_print("the signal is %d\n", signal);
                        if( signal == 0 )
                                break;
                        }
                gdk_threads_leave();
        }
}
void toggle_callback( GtkWidget *widget, GtkWidget *toggle )
{
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle))) {
        /* 如果运行到这里,开关按钮是按下的 */
                signal = 1;
                g_print("the toggle is pressed\n");
                g_thread_create( G_THREAD_FUNC(fm_record), NULL, TRUE, NULL );
        } else {
        /* 如果运行到这里,开关按钮是弹起的 */
                g_print("the toggle is raised\n");
                signal = 0;
       }
}
.
.
.
int main(int argc, char *argv[ ])
{
   ……
if( !g_thread_supported() )
                g_thread_init(NULL);
        gdk_threads_init();
……
gtk_widget_show_all( window );
       
        gdk_threads_enter();
        gtk_main();
        gdk_threads_leave();
      reutrn 0;
}
发表于 2008-12-19 13:25:07 | 显示全部楼层
fm_record( void )中的gdk_threads_xxxx多余。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表