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

一个关于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 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题