Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 有没有办法在freeglut(或glut)中插入退出回调函数?_Opengl_Glut_Freeglut - Fatal编程技术网

Opengl 有没有办法在freeglut(或glut)中插入退出回调函数?

Opengl 有没有办法在freeglut(或glut)中插入退出回调函数?,opengl,glut,freeglut,Opengl,Glut,Freeglut,在我的freeglut项目中,我分配了大量内存,当用户关闭freeglut(或glut)窗口时,我无法释放内存,有什么想法吗?freeglut提供了几种解决方案: 您可以调用glutSetOption(GLUT\u ACTION\u ON\u WINDOW\u CLOSE,GLUT\u ACTION\u CONTINUE\u EXECUTION)和glutLeaveMainLoop()使glutMainLoop()函数返回,然后您可以在glutMainLoop()调用后释放所有需要的内存 不需要

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

freeglut提供了几种解决方案:

  • 您可以调用
    glutSetOption(GLUT\u ACTION\u ON\u WINDOW\u CLOSE,GLUT\u ACTION\u CONTINUE\u EXECUTION)
    glutLeaveMainLoop()
    使
    glutMainLoop()
    函数返回,然后您可以在
    glutMainLoop()
    调用后释放所有需要的内存

  • 不需要调用
    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.
    
  • 或者您什么也做不了——任何现代操作系统在进程终止时都会正确地释放所有分配的内存。当然,如果您需要在终止时执行一些特殊的操作,比如写入日志文件、发送网络数据包,那么您必须手动执行这些操作


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

    何必麻烦呢?关闭GLUT窗口,进程将被终止,释放所有分配的资源。@datenwolf:我知道这看起来很愚蠢,但我想用合法的方式来做这些事情:-实际上,我对CUDA有一个问题,因为它在调用析构函数之前释放了缓冲区,所以有时候你实际上需要通过“你自己的”:)在方法2中,如果我关上窗户怎么办。我会陷入无限的
    循环吗?需要其他条件吗?