请教高人,在线程作为一个全局函数的情况下,线程里要对对话框进行UpdateData(false),怎么实现?

fuxf 2005-04-29 10:19:00
UINT ServerThread(LPVOID pParam)
{

CNewserverDlg *dlg=(CNewserverDlg*)AfxGetApp()->GetMainWnd();

dlg->UpdateData(false);//此句要出运行时错误,为什么?该怎么做?

....
return 0;
}
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fzergling 2005-04-30
  • 打赏
  • 举报
回复
自定义一个消息WM_UPDATEDATA
使用dlg->posemessage(WM_UPDATEDATA,0,0)通知对话框进行更新
fuxf 2005-04-30
  • 打赏
  • 举报
回复
请说具体一些
fuxf 2005-04-30
  • 打赏
  • 举报
回复
哦!
改成
dlg->PostMessage(WM_UPDATEDATA,0,0);
这下就对了,请解释一下行吗
fuxf 2005-04-30
  • 打赏
  • 举报
回复
在.h中定义:
const WM_UPDATEDATA=WM_USER+30;

//{{AFX_MSG(CNewserverDlg)
afx_msg void OnWMUpdateData();
//}}AFX_MSG

在.cpp中
BEGIN_MESSAGE_MAP(CNewserverDlg, CDialog)
//{{AFX_MSG_MAP(CNewserverDlg)
ON_MESSAGE(WM_UPDATEDATA,OnWMUpdateData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

在线程中发消息
::PostMessage((HWND)pParam,WM_UPDATEDATA,0,0);

在.cpp中写消息映射函数,
void CNewserverDlg::OnWMUpdateData()
{
UpdateData(false);
}

没有编译错误,但是文本框没有被更新!请教!

高手快来解决吧

Darnshong 2005-04-30
  • 打赏
  • 举报
回复
还是用消息比较好,不问产生访问冲突。
在线程里发消息,要更新的窗口在接收到消息后自行更新!
我又回来了`` 2005-04-30
  • 打赏
  • 举报
回复
我好象是多添一个函数绕过去的
呵呵
估计是最笨的办法吧
我也不清楚
在这个全局函数中好象操作界面就是回报错
dasiu 2005-04-30
  • 打赏
  • 举报
回复
也可以这样:
1)将 dlg的指针作为LVOID类型传给线程函数
2) 在线程函数中,通过 (CDialogA*)pVoid->访问对话框即可,可以通过UPDATEWINDOW()函数或消息,都可以实现。
  • 打赏
  • 举报
回复
方法是笨了点,但目前测试了这么久还没发现出错。
  • 打赏
  • 举报
回复
发送一个自定义消息给需要更新的窗口,该窗口接收到消息后自行更新。
fuxf 2005-04-29
  • 打赏
  • 举报
回复
能不能说具体一点,二位仁兄!?
huwei001982 2005-04-29
  • 打赏
  • 举报
回复
方法是笨了点,但目前测试了这么久还没发现出错
-------------------------------------------
这个方法并不笨, 而且是正确的方法, 注意发消息时用 PostMessage

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧