zoukankan      html  css  js  c++  java
  • MFC用对话框作容器时忘记增加DS_CONTROL风格导致的程序假死现象

      现在做的项目是一个基于MFC对话框的试验数据管理程序,根据试验不同的阶段,要分组显示三批控件:试验参数设置界面、试验答案填写界面、试验结果展示界面。为了界面管理和逻辑管理的方便,使用3个对话框作为容器来包含不同界面的控件。

      在程序即将交付时,将程序拿到了一个破机器上跑,发现程序在切换到其他程序或者最小化之后,或者调试切换到VS后,再切换回来会产生程序假死无响应的现象。一开始以为是OSG三维显示模块占用资源过大导致的,结果把OSG模块注释掉之后没有变化。

      最后多次测试后发现在程序刚启动后切换没有问题,但是当焦点在那几个容器对话框上之后就会假死。于是调查将对话框作为容器显示的正确方法。发现是少了这么两句:

    m_SettingLayer.Create(IDD_DIALOG_SETTINGLAYER, this);
    m_SettingLayer.MoveWindow(10, 100, 500, 600);
    //少了这一句,将此对话框作为控件看待
    m_SettingLayer.ModifyStyle(0, DS_CONTROL);
    //少了这一句,使得在主界面可以用tab来导航。
    m_SettingLayer.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
    m_SettingLayer.ShowWindow(SW_SHOW);

      加上这两句之后,程序占用从占满i7的25%CPU到现在几乎没什么占用。错怪OSG了。

      但是具体这两句话为什么会导致切换程序假死、CPU占用居高不下,暂时没有时间去研究,等以后再追究原因吧。就酱。

  • 相关阅读:
    遇到的StageFright问题 一 音视频因ALSA不同步
    stagefright
    细数开源历史上的九个重大事件
    AOP concepts (from spring.net document)
    javascript ECMA262概述
    Spring.net配置相关
    NUnit2.5 测试类几个方法
    Bill Gates 哈佛大学演讲 Never Surrend to Complexity
    iis6.0支持GZIP的详细设置方法
    Hessian是一个轻量级的remoting onhttp工具
  • 原文地址:https://www.cnblogs.com/winnersun/p/2984870.html
Copyright © 2011-2022 走看看