MFC 线程中使用 updatedata()函数问题。

我用MFC写了一个窗口程序,由于点开始运行按钮后,需要一个while循环,于是我把要运行的部分写到一个线程中。是这样实现的,在窗口类中创立线程,并且写了一个函数task(... 我用MFC写了一个窗口程序,由于点开始运行按钮后,需要一个while循环,于是我把要运行的部分写到一个线程中。 是这样实现的,在窗口类中创立线程,并且写了一个函数task()作为该窗口类的成员函数,定义了一个全局变量*glbp,用来指向当前窗口类的指针,glbp=this来实现,在线程的运行函数中使用了glbp->task();但是我task函数里面用到了updatedata()函数,编译无错,运行的时候就报错了,如果不放到线程中运行,就没事。该如何解决此类问题啊?我觉得就是线程中调用了updatedata()函数导致的错误。 展开
 我来答
Frank7258
推荐于2016-09-07 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:552万
展开全部
你不要在线程中调用UpdateData,你用SendMessage或者PostMessage向窗口发送自定义消息,然后在窗口类的响应中调用UpdateData。
追问
能说的详细一点吗?比如线程中如何写??   窗口类的响应中是指?如何生成?class向导里面选择一下吗?
追答
比如你的类叫CMyDialog,那么添加这么一个函数

LRESULT CMyDialog()::OnUpdateMyData(WPARAM wParam, LPARAM lParam)
{
UpdateData();
return 0;
}

然后定义在头文件定义一个常量
#define WM_UPDATEMY_DATA ((WM_USER) + 500)

在CPP文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间加入
ON_MESSAGE(WM_UPDATEMZ_DATA, CMyDialog::OnUpdateMyData)

启动线程,假定你的线程函数是类CMyDialog的static成员函数ThreadProc,那么它必须如下定义
class CMyDialog ....
{
....
static DWORD CALLBACK ThreadProc(LPVOID pPara);
...
};
创建线程:
HANDLE hThread = CreateThread(NULL, 0, CMyDialog::ThreadProc, (LPVOID)this, 0, NULL);
_ASSERTE(hThread);
CloseHandle(hThread);

线程函数里:
DWORD CALLBACK CMyDialog::ThreadProc(LPVOID pPara)
{
VERIFY(CMyDialog* pThisInstance = (CMyDialog*)pPara);

// 要更新的地方
pThisInstance->PostMessage(WM_UPDATEMY_DATA);
}
微微橙DH
2011-09-25 · 超过34用户采纳过TA的回答
知道答主
回答量:235
采纳率:0%
帮助的人:79.5万
展开全部
可以用UPDATEDATA

用AFXGETMAINFRAMEWND()函数获得主窗体指针~,即可UPDATEDATA
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水人百分百
2011-09-25
知道答主
回答量:22
采纳率:0%
帮助的人:17万
展开全部
updatedata(flase)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式