锡纸上写着什么。
Qt 5.x 在 Windows 上做得很好(尽管有控制台警告消息),但是在 Linux 中重新绘制时会窒息,如果你把 GUI 事件循环放在主线程。
那么,有什么东西可以可靠地跨 Windows 和 Linux(可能还有 Mac,但这似乎是一个远景)在主线程中处理 not-being-created/not-having-its-event-loop-running 吗?
这里的背景是我有一个我想通过 tclsh 使用的 DLL/SO,我希望那个 DLL/SO 提供一个 GUI。我可以弄乱 SWIG 生成的包装器来获取主解释器并从那里运行一些东西,但是弄乱它似乎是一个主要的麻烦。我已经对 Tk 进行了一些试验,但即使在调用 Tk_Init 之后,Tk_MainWindow 也会NULL
在创建的线程中的解释器上返回(解释器也是在该线程中创建的)。按需提供代码。
编辑:代码。load <libname>.so
这一切都在通过in加载 DLL/SO 后创建的单独线程中运行tclsh
。
Tcl_Interp* interp = Tcl_CreateInterp();
Tcl_AppInit(interp); // added on suggestion - all results the same so far
Tk_Init(interp);
/* GDB reveals 'interp->resultDontUse' to be blank here.
Return value of the above statement is 1 (TCL_ERROR) */
Tk_Window main_window = Tk_MainWindow(interp);
// main_window is NULL here, and thus the following line fails miserably
Tk_Window canvas = Tk_CreateWindow(interp, main_window, "gfx", NULL);
while(true) {
{ ... }
Tcl_DoOneEvent(TCL_DONT_WAIT);
}
Tcl_DeleteInterp(interp);
注意我仍然可以切换库。如果那里有一个原始问题适用的库,并且上述内容无法正常工作,我会切换。
更新
Tcl/Tk 似乎在非主线程中处理得很好。至少,比Qt好。谢谢!