OpenGL内存泄漏之主循环函数glutMainLoop()
来源:互联网 发布:淘宝排名查询 客户达 编辑:程序博客网 时间:2024/06/09 20:03
在Win32控制台程序中,标准的OpenGL流程是这样的:
int main(int argc, char *argv[])
{
glutInitWindowSize(500, 250);
glutInitWindowPosition ( 140, 140 );
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );
glutInit(&argc, argv);
glutCreateWindow( "Demo" );
glClearColor(1.0, 1.0, 1.0, 1.0);
glutDisplayFunc( Display );
glutReshapeFunc( Reshape );
glutMouseFunc ( Mouse ) ;
glutMotionFunc ( Motion ) ;
glutKeyboardFunc( Key );
glutMainLoop();
return 0;
}
而在MFC的对话框程序中,使用这样的流程,可能会出现内存的泄漏的问题,究其原因,是因为glutMainLoop() 阻断了系统的正常流程,在关闭glutCreateWindow()创建的窗口后,glutMainLoop()直接用exit(0)退出程序,而不会继续执行glutMainLoop()后的语句,这就使一些类的释放及资源回收工作无法进行,从而造成内存泄漏。纠正此问题,有3个办法:
1、使用glutLeaveMainLoop()代替glutMainLoop()。
2、处理代码中exit(0)的部分。
3、在glutMainLoop之前先设置:
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
然后再用glutMainLoop();则 glutMainLoop()会在退出后,继续执行其后的代码。
使用以上方法,可以有效处理glutMainLoop()造成的内存泄漏!
- OpenGL内存泄漏之主循环函数glutMainLoop()
- opengl glut glutMainLoop()函数
- OpenGL内存泄漏之初始化函数glutInit()
- 【OpenGL】glut 消息事件处理函数 glutMainLoop();
- 【OpenGL】glut 消息事件处理函数 glutMainLoop();
- openGL不能退出glutMainLoop的问题
- JS闭包循环引用导致内存泄漏之解决方法
- 循环引用导致内存泄漏
- 循环引用导致内存泄漏
- 常规循环引用内存泄漏和Closure内存泄漏
- 常规循环引用内存泄漏和Closure内存泄漏
- 虚析构函数与内存泄漏
- 内存篇之堆泄漏
- Android内存泄漏之 handler
- 内存泄漏之thread浅析
- Android 内存泄漏之handler
- Android内存泄漏之前因后果
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- 报道啦
- return语句在函数之外
- ls算法
- Palindromic Squares
- [转]Unix常用命令
- OpenGL内存泄漏之主循环函数glutMainLoop()
- Processing a Request to Remove a Device
- 现阶段的想法2010年12月10日22:19:04
- Mixing Milk
- DirectX的安装与D3D的初始化
- 信号量与自旋锁
- 在VC中生成嵌套JSON
- Silverlight Ria Services异步域操作
- TOEFL-ibt 模板