- 论坛徽章:
- 0
|
程序启用了多线程,并且用io event处理监听端口的事件。
main()
{
...
g_thread_init (NULL);
gdk_threads_init ();
...
// listen on port
io_channel = g_io_channel_unix_new(listen_fd);
io_sourceid = g_io_add_watch( io_channel,( G_IO_IN | G_IO_HUP | G_IO_ERR ),my_watch,NULL );
...
gdk_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
} |
在my_watch里会调用gtk_dialog_run()
my_watch()
{
...
// gdk_threads_enter(); //如果不加这gdk_threads_xxx()则,按下按钮后UI不再响应。
gtk_dialog_run();
// gdk_threads_leave();
...
}
|
我的问题是,在其它UI事件(如 button "clicked")里调用gtk_dialog_run()则是正常的,不需要加gdk_threads_xxx(),同样是在主线程里,为什么io_watch()事件里需要加gdk_threads_xxx呢,他们有什么区别?
因为我有一个公共的函数用到了gtk_dialog_run(),不想区分这个回调来自io event还是button clicked,那么有别的方法可以避免调用gdk_threads_xxx吗? |
|