最近我一直在摆弄 GLEW 和 win32,遇到了一个问题。每当我通过关闭窗口退出我的应用程序时,我的 Window 类的析构函数被调用并且我的 openGL 渲染上下文被删除。我可以这么说,因为我使用 CodeXL 测试了该程序,并且我的上下文被删除是肯定的。但是,如果我通过终止我的控制台(使用 AllocConsole() 创建)退出我的应用程序,我的上下文不会根据 CodeXL 被删除并泄漏内存。这是应该破坏我的上下文的析构函数:
Window::~Window()
{
wglMakeCurrent(0,0);
wglDeleteContext(renderingContext);
}
有谁知道为什么这个析构函数在关闭控制台时不运行但在我关闭窗口时运行?
如有任何意见,我们将不胜感激。
最佳答案
my context does not get deleted according to CodeXL and leaks memory.
是的。所以呢?该进程已被终止,因此它消耗的所有资源都由操作系统释放。事实上,如果一个进程无论如何都要终止,您不应该清理。只需将那些需要保存的东西保存到持久性存储中,进行必要的通信以使事情与其他进程保持一致,然后就终止。
迭代流程中的所有资源并释放/删除它们就像您正在清理并在拆迁人员用破坏球将其拆毁之前给房子刷漆一样。
内存泄漏从来都不是程序终止时的问题!内存泄漏是程序运行时的问题:它们使进程消耗越来越多的资源,最终导致系统资源耗尽。操作系统的 react 是杀死占用系统资源的进程,以获得喘息的空间。
Does anyone know why this destructor is not run when closing the console but is run whenever I kill the window?
因为这两个 Action 是非常不同的东西。关闭窗口时,系统会发送一条 WM_CLOSE 消息,您可以通过适本地离开消息循环、从主函数返回来对此作出 react ,该函数向运行时发出信号以调用所有超出范围的对象的构造函数。
当您关闭控制台窗口时,您的进程将失去其控制终端(AllocConsole 将控制台附加为控制终端)。这是一个关键条件,默认行为是立即终止进程。
在进程退出时当然有几件合法的事情要做。将内容写入日志,可能会在退出前生成程序最后状态的自动保存,诸如此类。当谈到 Windows 控制台 Windows 时,您必须安装一个处理程序,它为操作系统提供了一种优雅地处理控制台事件的方法。这个函数称为 HandlerRoutine:(记录在 https://msdn.microsoft.com/en-us/library/windows/desktop/ms683242%28v=vs.85%29.aspx )并设置为 SetConsoleCtrlHandler
关于c++ - 退出控制台后析构函数不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36372616/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems