当前位置: 技术问答>linux和unix
急急急,请教如何不断创建,销毁窗口,有源码!
来源: 互联网 发布时间:2015-10-19
本文导语: 我使用GTK+2.0开发,想实现如下功能,在主程序中输入"s"键创建一个窗口,"p"键把这个窗口销毁。 但我发现在运行过程中第一次输入"s"和"p"键时正常,第二次输入"s"键时,调试输出为 GLib-WARNING **: g_main_context_prepare():...
我使用GTK+2.0开发,想实现如下功能,在主程序中输入"s"键创建一个窗口,"p"键把这个窗口销毁。
但我发现在运行过程中第一次输入"s"和"p"键时正常,第二次输入"s"键时,调试输出为
GLib-WARNING **: g_main_context_prepare(): main loop already active in another thread,然后就不正常了。麻烦各位大虾看看是何原因,有何方法解决,万分感谢!
我的代码如下:
#include
#include
pthread_t g_TaskId = -1;
GtkWidget *g_window = NULL;
static void *work_task(void *param)
{
if(NULL==g_window)
{
g_window = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_set_default_size(GTK_WINDOW(g_window), 250, 240);
gtk_widget_show (g_window);
gtk_main ();
}
}
void show_silence()
{
int err;
err = pthread_create(&g_TaskId, NULL, work_task, NULL);
}
void stop_silence()
{
gtk_widget_destroy(g_window);
gdk_flush();
gtk_main_quit();
}
int main( int argc, char *argv[] )
{
gtk_init (&argc, &argv);
int quit = 0;
while (!quit)
{
int c;
c = getchar();
switch (c)
{
case 'q':
case 'Q':
quit = 1;
break;
case 's':
case 'S':
show_silence();
break;
case 'p':
case 'P':
stop_silence();
break;
default:
break;
}
}
gtk_main_quit();
return 0;
}
但我发现在运行过程中第一次输入"s"和"p"键时正常,第二次输入"s"键时,调试输出为
GLib-WARNING **: g_main_context_prepare(): main loop already active in another thread,然后就不正常了。麻烦各位大虾看看是何原因,有何方法解决,万分感谢!
我的代码如下:
#include
#include
pthread_t g_TaskId = -1;
GtkWidget *g_window = NULL;
static void *work_task(void *param)
{
if(NULL==g_window)
{
g_window = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_set_default_size(GTK_WINDOW(g_window), 250, 240);
gtk_widget_show (g_window);
gtk_main ();
}
}
void show_silence()
{
int err;
err = pthread_create(&g_TaskId, NULL, work_task, NULL);
}
void stop_silence()
{
gtk_widget_destroy(g_window);
gdk_flush();
gtk_main_quit();
}
int main( int argc, char *argv[] )
{
gtk_init (&argc, &argv);
int quit = 0;
while (!quit)
{
int c;
c = getchar();
switch (c)
{
case 'q':
case 'Q':
quit = 1;
break;
case 's':
case 'S':
show_silence();
break;
case 'p':
case 'P':
stop_silence();
break;
default:
break;
}
}
gtk_main_quit();
return 0;
}
|
gtk建议在gtk中使用pthread的时候使用锁进行同步
欢迎访问我的个人网站 www.linuxc.net
欢迎访问我的个人网站 www.linuxc.net
|
专业顶贴 兼职接分