【问题标题】:Is there a way inserts exit callback function in freeglut (or glut)?有没有办法在 freeglut(或 glut)中插入退出回调函数?
【发布时间】:2012-06-20 06:37:53
【问题描述】:

在我的 freeglut 项目中,我分配了很多内存,当用户关闭 freeglut(或 glut)窗口时,我无法释放它,有什么想法吗?

【问题讨论】:

  • 何必呢?关闭 GLUT 窗口,进程无论如何都会终止,释放所有分配的资源。
  • @datenwolf:我知道这看起来很愚蠢,但我想以合法的方式做事:-|
  • 实际上,我遇到了 CUDA 的问题,因为它在我的析构函数被调用之前释放了它的缓冲区,所以有时你实际上需要“你自己”来做 :)

标签: opengl glut freeglut


【解决方案1】:

FreeGLUT 提供了几种解决方案:

  1. 你可以调用glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION)glutLeaveMainLoop()使glutMainLoop()函数返回,然后你可以在glutMainLoop()调用后释放你想要的所有内存。

  2. 您可以像这样创建自己的事件循环,而不是调用glutMainLoop()

    bool running = true;
    while (running)
    {
        glutMainLoopEvent();
    }And whenever you want to exit application - just set running variable to false, and free the allocated memory after while loop.
    
  3. 或者你什么也做不了——任何现代操作系统都会在进程终止时正确地释放所有分配的内存。当然,如果你需要在终止时做一些特殊的事情——比如写入日志文件、发送网络数据包,那么你必须手动完成。

【讨论】:

  • 在方法2中,如果我关闭窗口会怎样。我会陷入无限的while 循环吗?需要其他条件吗?
【解决方案2】:

在主循环之前用 atexit(onexit) 注册一个退出函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多