yuanjq91 发表于 2012-5-30 14:55:34

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

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

程序总共两个文件alsa_record.cgtk_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

怎么回事啊!!郁闷 求教教我啊~~

yuanjq91 发表于 2012-5-30 16:40:22

求教求教~~

yuanjq91 发表于 2012-5-31 17:17:40

问题解决 用的是pthread.h库来实现多线程 还是原始的好
gtk封装的不好用啊
人气不够啊。。自娱自乐ing

ACTom 发表于 2012-6-1 09:46:22

if(!g_thread_supported()) g_thread_init(NULL);

为嘛我没看懂?不支持多线程,然后才初始化???
页: [1]
查看完整版本: 大神求教!gtk录音多线程问题 编译通过,执行时Gdk-ERROR