大神求教!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
怎么回事啊!!郁闷 求教教我啊~~ 求教求教~~ 问题解决 用的是pthread.h库来实现多线程 还是原始的好
gtk封装的不好用啊
人气不够啊。。自娱自乐ing if(!g_thread_supported()) g_thread_init(NULL);
为嘛我没看懂?不支持多线程,然后才初始化???
页:
[1]