GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3083|回复: 3

大神求教!gtk录音多线程问题 编译通过,执行时Gdk-ERROR

[复制链接]
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-5-30 14:55:34 | 显示全部楼层 |阅读模式
    大神教教我吧~~  
    我是想做的是桌面基于alsa的gtk录音小程序,使用一个button点击来执行录音
    发现程序卡死,就想到用多线程,可是编译的时候没错,执行出错
    错误信息:
    Gdk-ERROR **: g_thread_init() must be called before gdk_threads_init()
    Trace/breakpoint trap
    可是我确实是先调用g_thread_init()啊 怎么回事啊!!

    程序总共两个文件alsa_record.c  gtk_main.c
    在alsa_record.c中设置一个接口函数alsa_record_main()
    然后在gtk_main.c中使用按钮点击响应来调用alsa_record_main来实现录音
    使用的多线程代码简单描述是:
    int main(int argc, char *argv[])
    {
        if(!g_thread_supported()) g_thread_init(NULL);
        gdk_threads_init();
        gtk_init(&argc, &argv);
       。。。
        g_signal_connect(G_OBJECT(recordButton), "clicked", G_CALLBACK(create_record_thread), NULL);
       。。。
        gdk_threads_enter();
        gtk_main();
        gdk_threads_leave();
    }
    static void create_record_thread(GtkWidget *window, gpointer data)
    {
         g_thread_create(alsa_record_main, NULL, FALSE, NULL);
    }
    然后在alsa_record.c的接口函数中
    gpointer alsa_record_main()
    {
        。。。
        while(...){
        gdk_threads_enter();
        。。。
        gdk_threads_leave();
        }
        。。。
    }
    编译使用的makefile文件内容是:
    cc = gcc
    all:gtk_main
    gtk_main.o:gtk_main.c
         $(cc) -c gtk_main.c `pkg-config --cflags --libs gtk+-3.0 gthread-2.0`
    alsa_record.o:alsa_record.c
         $(cc) -c alsa_record.c `pkg-config --cflags --libs gtk+-3.0 gthread-2.0    ` -lasound
    gtk_main:gtk_main.o alsa_record.o
         $(cc) -o gtk_main gtk_main.o alsa_record.o `pkg-config --cflags --libs     gtk+-3.0 gthread-2.0` -lasound
    clean:
         rm gtk_main *.o

    怎么回事啊!!郁闷 求教教我啊~~
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2012-5-30 16:40:22 | 显示全部楼层
    求教求教~~
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2012-5-31 17:17:40 | 显示全部楼层
    问题解决 用的是pthread.h库来实现多线程 还是原始的好
    gtk封装的不好用啊
    人气不够啊。。自娱自乐ing
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-6-1 09:46:22 | 显示全部楼层
    if(!g_thread_supported()) g_thread_init(NULL);

    为嘛我没看懂?不支持多线程,然后才初始化???
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-12-22 01:44 , Processed in 0.024357 second(s), 7 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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