2012-06-20 26 views
2

在我的freeglut项目中,我已经分配了很多内存,并且当用户关闭freeglut(或者glut)窗口时,我没有办法解放任何想法?有没有办法在freeglut(或者glut)插入退出回调函数?

+0

为什么要麻烦?关闭你的GLUT窗口,进程终止,释放所有分配的资源。 – datenwolf

+0

@datenwolf:我知道这看起来很愚蠢,但我想用合法的方式来做事: - | –

+0

实际上,我在CUDA中遇到了一个问题,因为它在调用析构函数之前释放了它的缓冲区,所以有时候您实际上需要通过“您自己的”来实现:) – NightElfik

回答

6

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. 或者你也可以什么都不做 - 任何现代操作系统正确将释放所有分配的内存时,进程终止。当然,如果你需要在终止时做一些特殊的事情 - 比如写入日志文件,发送网络数据包,那么你必须手动做到这一点。

+0

感谢您的出色解决方案! –

+0

在方法2中,如果关闭窗口会怎么样。我会陷入无限的'while'循环吗?需要任何其他条件? – ar2015

1

注册的出口函数的atexit(的OnExit)主循环之前。

相关问题