是否有一个用于GUI的C库,它不需要使用自己的事件循环?

the*_*ejh 5 c x11 user-interface toolkit event-loop

我正在寻找一个GUI工具包,我可以在普通的C中使用,至少在Linux上工作,并且不会强迫我使用它自己的eventloop - 我想使用libev作为主循环并让它通知工具包库时X事件进入左右.

我还没有找到类似的东西 - 我真的需要修补工具包库以获得我想要的东西吗?

R..*_*R.. 4

不幸的是,这种需求可能会严重限制您可以选择的 GUI 工具包,因为它们在这方面(以及其他许多方面)都很糟糕。我不知道这个答案是否公平,但我想向您提出一个不同的解决方案:让 GUI 工具包运行它想要在自己的线程或进程中运行的任何事件循环。由于 GUI 库是出了名的糟糕(崩溃或在没有警告的情况下退出),“自己的进程”版本实际上可能是最好的主意——您可以通过管道与您的 UI 进行通信,并像您想要的那样滚动您自己的事件循环。主要流程。线程当然有自己的好处:不需要序列化与 GUI 共享的数据,也不需要担心用户杀死主程序而不杀死 GUI 的情况,反之亦然(因为线程不能单独被杀死)。

  • “不必要的上下文切换”的成本是一个神话。即使它很昂贵,你谈论的是每个 GUI 事件或输出发生一次的事情,而不是每秒发生数百万次。实际上,即使在单核上,同一进程的线程之间切换的延迟也是微不足道的。不需要页表/TLB 刷新,只需交换通用寄存器和其他一些琐碎的事情。延迟时间为个位数微秒。在多核(现在是常态)上根本没有开关;另一个线程最终在另一个核心上运行。 (5认同)