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

#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个回答

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐