2014-10-28 71 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,要做到這將是在不同的進程的唯一途徑