c++ - 那里有任何可以便携处理*不*在主线程中的 GUI 库吗?

标签 c++ c user-interface tcl tk-toolkit

<分区>

jar 头上写的是什么。

Qt 5.x 在 Windows 上运行良好(尽管有控制台警告消息),但在 Linux 上重新绘制时会窒息,如果你放置 GUI 事件循环,显然任何基于 Cocoa(我从未使用过)的东西都会扼杀自己在主线程之外。

那么,有没有什么东西可以在 Windows 和 Linux(也许还有 Mac,但这似乎是一个远景)中可靠地处理主线程中未创建/没有事件循环的运行)?

这里的背景是我有一个要通过 tclsh 使用的 DLL/SO,我希望该 DLL/SO 提供一个 GUI。我可以弄乱 SWIG 生成的包装器以获得主解释器并从那里运行一些东西,但弄乱它似乎是一个主要的麻烦。我对 Tk 进行了一些试验,但即使在调用 Tk_Init 之后,Tk_MainWindow 也会返回 NULL在创建的线程中的解释器上(解释器也是在该线程中创建的)。按需提供代码。

编辑:代码。这一切都在通过 load <libname>.so 加载 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);

注意我仍然可以切换库。如果有一个 lib 可以解决原始问题而上面的问题无法解决,我会切换。

更新

Tcl/Tk 似乎可以很好地处理非主线程中的情况。至少,比Qt好。谢谢!

最佳答案

好的,既然这个问题是通过评论回答的,我把答案移到答案中。

是的,Tk GUI 库可以在不在主线程中的情况下做得很好。您遇到的问题是您的初始化失败(由于版本不匹配,用您的话来说),并且由于您没有正确检查结果,所以您没有注意到错误。

关于c++ - 那里有任何可以便携处理*不*在主线程中的 GUI 库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752562/

相关文章:

c++ - Blas 和 Lapack 库是否有原生 C++(不是 C)接口(interface)?

android - 在 Android native 代码中挂起 TCP 套接字发送调用

java - 如何获得 Java 中唯一字符串列表的随机排序?

c# - 如何在 Aero/.NET 4 中获取 block 样式进度条

c++ - 如何使用C++将字符从字符串转换为整数变量

c++ - C中结构内的数组

c++ - 使用 C++11 Range For 替换字符串中的所有字符

c++ - Windows 函数 "NetUserChangePassword"不再在 Windows 10 下工作(在 Windows 7 下工作)

c++ - C 字符串是否保证是数组?

java - 如何在 zul(ZK) 中的上传按钮上打开默认目录?