2014-10-28 81 views
0

我有一个C++应用程序必须在某些事件上创建一个基于gtk的弹出窗口。 目前,我在该事件中分叉了一个名为_displaytask的线程,该线程调用gtk_init()。 对gtk_init的呼叫挂起并永不返回。任何人都知道这个电话为什么会挂起? gtk版本是gtk + -2.0。gtk_init挂起在一个线程

void* Gui::displayTask(void *data) 
{ 
    IDC_TRACE("Gui::display task tart"); 
    Gui* obj=(Gui *)data; 
    if(obj!=NULL) 
    {  
     if(! g_thread_supported()) 
      g_thread_init(NULL); 

     /* Secure gtk */ 
     gdk_threads_init(); 
      gdk_threads_enter(); 
     IDC_TRACE("doing a gtk init");   
     gtk_init_check(0,0); 
     obj->initialise(); 

该控件达到gtk_init(),但从来没有超过它达到初始化。

+0

一般'gtk_init'和'gtk_main'应该从'main'线程调用。 – 2014-10-28 07:51:54

+0

试过...仍然挂起。实际上主线程(进程)是一个服务器。它有CORBA演员的概念。 – basav 2014-10-28 08:45:40

回答

0

Gui_display:04714807269964847148072699648 errno变量= 0

(处理:26070):GTK的WARNING **:此过程当前正在运行setuid或setgid。 这不支持使用GTK +。您必须改为创建帮助程序 。有关详细信息,请参阅:

http://www.gtk.org/setuid.html 

拒绝初始化GTK +。

我不知道这earlier.Got这个错误message.Now,要做到这将是在不同的进程的唯一途径