• 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占用居高不下,暂时没有时间去研究,等以后再追究原因吧。就酱。

  • 相关阅读:
    VB连接ORACAL过程
    【EXCEL】字段是否存在的查询
    ASP.NET中插入FLASH[学来得]
    做一个健康的的程序员
    SQL语法规范——Insert语句
    WEBBENCH测试网站的负载工具
    常用简易JavaScript函数(转)
    WEB服务器性能/压力测试工具HTTP_LOAD、WEBBENCH、AB、SIEGE使用教程
    Linux服务器监控SHELL脚本(自动发邮件)(转)
    空间页面CSS说明
  • 原文地址:https://www.cnblogs.com/winnersun/p/2984870.html
Copyright © 2020-2023  润新知