【问题标题】:How to combine loops or how to implement many loops into glib main loop?如何组合循环或如何在 glib 主循环中实现多个循环?
【发布时间】:2012-03-24 03:20:15
【问题描述】:

我有一个使用 Glibglib 主循环 的程序。此外,它使用 openGL 来绘制一些东西,并且需要处理来自键盘的输入

问题在于,我过去常常将所有内容彼此分开,而不是将它们组合在一个程序中。由于 Glib 有主循环,而 openGL 使用循环进行渲染(有一些睡眠)。有了这些,我需要一个循环来监听关键事件。

将所有这些工作结合在一起的最佳方法是什么?我应该在线程中创建三个循环还是实现其他循环到 glib 主循环以及如何做到这一点?

【问题讨论】:

  • 也许您可以使用 GLib 主循环来安排您的渲染活动,即使渲染需要定期进行(例如每 1/15 秒)。 GLib 自身未检测到的事件可以转换为 GLib 事件。通过将 X 键盘事件转换为 GLib 事件,我发现了一些将 X 集成到 GLib 循环中的代码。

标签: c opengl pthreads glut glib


【解决方案1】:

我不确定这是否是您要查找的内容,但我使用了一个用于 GTK+ 的 OpenGL 扩展,名为 gtkglext http://projects.gnome.org/gtkglext/

GTK+ 项目也依赖于 Glib,因此没有任何变化。使用 GTK+ 主循环和 gtkglext 的优势在于,您可以将常规按钮/小部件或自定义 2D/3D 小部件与 OpenGL 窗口混合使用。

【讨论】:

  • 我对此持强硬态度,但我认为使用 GTK+ 会超重,因为我真的不需要任何按钮或 GKT+ 主要用于的任何东西。顺便说一句,如果我使用这样的重量级库,但如果我只使用部分,我的程序还会很慢吗?如果没有,那可能是一个简单的解决方案。
  • 我已经检查了this 并决定尝试您的建议。
【解决方案2】:

我不了解 Glib 本身,但我怀疑您想要做的是有一个事件循环,它可以切换和移交事件以由适当的子系统处理。然后返回主循环。

【讨论】:

    猜你喜欢
    • 2014-02-15
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多