u014369461
香烟恋上火柴
采纳率66.7%
2018-03-26 08:40 阅读 1.2k

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

5

#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条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-03-26 15:38

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

    点赞 评论 复制链接分享

相关推荐