香烟恋上火柴 2018-03-26 08:40 采纳率: 66.7%
浏览 1288
已结题

一个关于MFC的界面问题,调用ReDrawWindow程序被卡死

#ifndef ADD_NOTIFY
#define ADD_NOTIFY
先上代码,
监听类
//ModelObserver.h
class ModelObserver{
public:
virtual void Observer(float process) = 0;
virtual ~ModelObserver(){};
};
#endif

/////////////////////////////////////////////////////
//一个对话框类
#include "ModelObserver.h"
#include "TextProgressCtrl.h"
#define PROCESS_ID (WM_USER + 10)
// CProcessDialog 对话框

class CProcessDialog : public CDialog, public ModelObserver
{
DECLARE_DYNAMIC(CProcessDialog)
public:
//...
virtual void Observer(float process)
{

}
virtual void OverObserver()
{
//指针和进度条的创建就省略了
        int pos = process * 1000;
    m_pProcess->SetPos(pos);
    //就是这里,内部会调用RedrawWindow函数会导致程序卡死
}

private:
CTextProgressCtrl* m_pProcess;
//..

DECLARE_MESSAGE_MAP()

public:
virtual BOOL OnInitDialog();
};

//Model.h建模类
//....
public
void SetOvserv(ModelObserver* modelObserv);
//...

private:
//...
ModelObserver* m_modelObservs;

///////////////////////////////
//Model.cpp
在建模类中有一个线程会调用

ThreadProc()
{
while(flag)
{
m_modelObservs->Observer();
}
}

//大致就是这个样子,每个类单独用都没问题,是想试一下用观察者模式来弄一个进度条通知,其他部分都没问题,就是走到setPos内部的时候刷新窗口整个程序都卡死

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-03-26 15:38
    关注

    派生类覆盖以后有没有调用它,造成死循环,这段代码是放在多线程调用的么?

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?