3 回答
TA贡献1895条经验 获得超3个赞
暂且不管你怎么定义的,先说这个UpdateData()。这个函数是
CWnd类的一个成员函数,不是一个静态函数,所以不能像你那样,用CMy14MFC_6Dlg::UpdateData(FALSE);这种方式调用。只有在类的内部调用(即类成员函数调用),或通过类的实例对象调用。
最后一句“由于这个程序要用到Sleep(),所以采用的是多程序.”也很难理解,我还是第一次听说“多程序”这个词。
暂且我就把它当成是多线程吧,你说你要用到 Sleep() 这个函数,我想你是想实现那个一秒自加一次的功能吧,你用一个循环,加一次,然后 Sleep 一秒,对吧。
其实这个功能可以,而且应该用 Timer实现。
TA贡献1772条经验 获得超5个赞
CXXXDLG居然能::UPdateData这样调用,厉害,难道一个类只能有一个实力打开一个拥有同样数据的对话框,VC不可能将这函数写成静态的UPDATEDATA
你要想再外弄,得发MESSAGE自定义消息,让类里自己调用用ON_MESSAGE红设调用函数,想来你开发语言的不用那么复杂只要:
"多程序运行"
你的超级智能程序!
TA贡献1898条经验 获得超8个赞
用一个线程就行了
在创建线程时,把对话框的指针做为参数
在线程实现里面,把参数转为对话框指针,有了指针就可以调用了
///////////////
声明
public:
static DWORD WINAPI UpdateDataThread(LPVOID);///注意声明为static
定义
DWORD WINAPI CMy14MFC_6Dlg::UpdateDataThread(LPVOID lp){
CMy14MFC_6Dlg* dlg = (CMy14MFC_6Dlg*)lp;
while(true){
dlg->UpdateData(FALSE);
Sleep(1000);
}
return 0;
}
CMy14MFC_6Dlg::XXXXX(){///在某函数里面创建一个线程,关键是把this做为参数传进去
CreateThread(NULL,0,LPTHREAD_START_ROUINE(&CMy14MFC_6Dlg::UpdateDataThread),this,0,0);
}
//不好意思,本人不是高手,以上是凭脑写的,不知道有没有错误,请原谅
- 3 回答
- 0 关注
- 1037 浏览
添加回答
举报