Qt 集成XCB和libX11事件循环-挂起Xt内的select/poll
我试图将两个代码体集成到同一个过程中,每个过程之前都有各自GUI工具包的独立事件循环——一个使用Xt,另一个使用Qt5。其目的只是为了能够显示Qt子窗口,而不是像现在已经失效的Qt/Motif集成扩展那样实现完全集成 我已经能够构建一个使用标准Qt事件循环运行的粗糙原型,使用一个本机事件过滤器将XCB事件转换为XEvents(使用XESetWireToEvent+其处理程序从XEvents/X11 wire格式转换)。然后使用XtDispatchEvent()将这些XEvent直接分派到Xt。此时,我可以运行该程序,在同一个程序中创建Xt/Motif小部件和Qt小部件,使用菜单,绘制二维图形,并同时使用Qt和Motif小部件 我遇到的问题是,在创建新的主题对话框时会有很长的延迟。我已经追踪到libXt中的XtWaitForSomething(),这最终归结为X服务器连接套接字上的select()或poll()。调用XtWaitForSomething()是在XtManageChild()内进行窗口布局管理的结果_XtWaitForSomething()似乎正在检查事件队列中是否有挂起的事件 我有几个问题:Qt 集成XCB和libX11事件循环-挂起Xt内的select/poll,qt,events,x11,xcb,motif,Qt,Events,X11,Xcb,Motif,我试图将两个代码体集成到同一个过程中,每个过程之前都有各自GUI工具包的独立事件循环——一个使用Xt,另一个使用Qt5。其目的只是为了能够显示Qt子窗口,而不是像现在已经失效的Qt/Motif集成扩展那样实现完全集成 我已经能够构建一个使用标准Qt事件循环运行的粗糙原型,使用一个本机事件过滤器将XCB事件转换为XEvents(使用XESetWireToEvent+其处理程序从XEvents/X11 wire格式转换)。然后使用XtDispatchEvent()将这些XEvent直接分派到Xt。此
#0 0x00000037b30e9a5d in poll () from /lib64/libc.so.6
#1 0x000000355f82d468 in _XtWaitForSomething () from /lib64/libXt.so.6
#2 0x00007ffff77b871f in _XmRootGeometryManager () from /lib64/libXm.so.2
#3 0x000000355f82569f in _XtMakeGeometryRequest () from /lib64/libXt.so.6
#4 0x000000355f8257aa in XtMakeGeometryRequest () from /lib64/libXt.so.6
#5 0x00007ffff77b77e6 in geometry_manager () from /lib64/libXm.so.2
#6 0x000000355f8255f4 in _XtMakeGeometryRequest () from /lib64/libXt.so.6
#6 0x000000355f8255f4 in _XtMakeGeometryRequest () from /lib64/libXt.so.6
#7 0x000000355f8257aa in XtMakeGeometryRequest () from /lib64/libXt.so.6
#8 0x00007ffff773852e in _XmMakeGeometryRequest () from /lib64/libXm.so.2
#9 0x00007ffff770ed51 in change_managed () from /lib64/libXm.so.2
#10 0x000000355f82a2e8 in XtRealizeWidget () from /lib64/libXt.so.6
#11 0x00007ffff771c8d6 in change_managed () from /lib64/libXm.so.2
#12 0x000000355f82c57d in ManageChildren () from /lib64/libXt.so.6
#13 0x000000355f82ca11 in XtManageChildren () from /lib64/libXt.so.6
#14 0x000000355f82cb18 in XtManageChild () from /lib64/libXt.so.6
...