#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内部的时候刷新窗口整个程序都卡死