2013-03-13 105 views
0

我正在使用Netbeans C++创建一个小项目。我有这个简单的代码:cv :: namedWindow()挂起时调用

int main(int argc, char** argv) { 
    cv::namedWindow("Output"); 

    // Create Receiver and Decoder on another thread 
    boost::thread t1 = boost::thread(startReceiver); // Details irrelevant 
    boost::thread t2 = boost::thread(startDecoder); // Details irrelevant 

    std::cout << "Waiting..." << std::endl; 

    t2.join(); 
    t1.join(); 

    std::cout << "Finished." << std::endl; 

    return 0; 
} 

程序挂在cv::namedWindow("Output");。我已暂停使用GDB的程序,这是调用堆栈:

poll() 
??() 
xcb_connect_to_fd() 
xcb_connect_to_display_with_auth_info() 
_XConnectXCB() 
XOpenDisplay() 
gdk_display_open() 
gdk_display_open_default_libgtk_only() 
gtk_init_check() 
gtk_init() 
cvInitSystem() 
cvNamedWindow() 
main (argc=1, argv=0x7fffffffe4c8) 

这是轮询的东西,我不知道是什么...任何想法?

回答

2

这似乎是与GTK相关的问题。尽量使用标准窗口:

cv::namedWindow("Output", CV_WINDOW_NORMAL|CV_GUI_NORMAL); 
+0

解析挂该调用,但现在当我打电话'CV :: imshow(“输出”,IMG);'内它挂起升压线程之一.. .. – justderb 2013-03-13 15:36:06

+0

通常不允许尝试在与主线程不同的线程中显示屏幕上的内容。我不知道'imshow'的实现,但这可能是这里的问题。尝试从主线程调用'imshow'。 – cedrou 2013-03-13 16:09:05

+0

好的,谢谢。因为你确实解决了这个问题,所以标记为正确的,那么我将不得不针对线程问题发布另一个问题...... – justderb 2013-03-14 17:57:01