工作线程更新线程界面控件数据的问题

lidatou 2018-08-27 11:11:03
MFC对话框应用程序有个CTestDlg;在这个对话框上有个listctrl控件。一个工作线程,
WINAPI RecvThreadProc(LPVOID pVoid)
{
CTestDlg* pDlg=(CTestDlg*)pVoid;
pDlg->m_lst.InsertItem(pDlg->m_lst.GetItemCount(),...);//在这个地方往listctrl控件里插入数据
}
在主线程里面,
CreateThread(0, 0, RecvThreadProc, (void *)this/*这个this是主界面的CTestDlg*/, 0, 0);
也就是说我在工作线程里通过这种方式往主界面控件里添加数据,我的问题是这种方式可行不?(我看网上都说线程间通信应该用发送消息的方式),如果不可

行,啥情况会导致冲突或出现问题,是不是在主线程里往这个Listctrl控件删除或添加数据会出现问题,欢迎大神指点。
...全文
291 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧童吃五谷 2018-09-02
  • 打赏
  • 举报
回复
上面函数名称写错了,应该是CWnd::PostMessage(...)函数
牧童吃五谷 2018-09-02
  • 打赏
  • 举报
回复
根据MFC的要求,后台工作者线程基本不能直接调用其余线程建立的MFC的控件中的函数,因为这些控件都是底层的窗口对象,底层的窗口对象不能在多线程之间直接访问的。比较可靠的方法是在另外一个线程消息,使用PostWindowMessage(...)这个函数可行的
jacksonfan 2018-09-02
  • 打赏
  • 举报
回复

在线程里向主程序发送消息
pDlg->SendMessage(MSG_UPDATE_UI,wParam,lParam);//wParam lParam根据自己的需要发送的数据
主程序 需要自定义一个MSG_UPDATE_UI 消息响应来接收消息
向立天 2018-08-31
  • 打赏
  • 举报
回复
不要直接操作界面,发消息过去让它自己操作
走好每一步 2018-08-30
  • 打赏
  • 举报
回复
主界面其它地方也对该控件操作,工作线程也操作,多试几次,就会崩的
xian_wwq 2018-08-29
  • 打赏
  • 举报
回复
MFC非线程安全,
少量线程情况下不出错不代表方法正确
UI数据更新,选择SendMessage或者PostMessage
sichuanwww 2018-08-29
  • 打赏
  • 举报
回复
SendMessage
Eleven 2018-08-28
  • 打赏
  • 举报
回复
MFC类非线程安全的,改用发自定义消息到UI线程,在UI线程中的消息响应函数中去操作UI上的控件~
smwhotjay 2018-08-28
  • 打赏
  • 举报
回复

vc 其他线程搞ui 最好发消息.别控件指针操作。
lidatou 2018-08-27
  • 打赏
  • 举报
回复
我在工作线程不停的insert,在主线程delete,没崩溃,我就想让程序崩溃。英文的看不懂啊,英文水平太差
赵4老师 2018-08-27
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
sevancheng 2018-08-27
  • 打赏
  • 举报
回复
鼠标在操作 CTestDlg界面的list控件(InsertItem DeleteItem等),后台工作线程也在跑,可能会崩溃
lidatou 2018-08-27
  • 打赏
  • 举报
回复
引用 1 楼 chengbar 的回复:
要用消息,程序退出时候可能出错

那如果保证程序退出前工作线程退出还有哪种可能会出问题
sevancheng 2018-08-27
  • 打赏
  • 举报
回复
要用消息,程序退出时候可能出错
赵4老师 2018-08-27
  • 打赏
  • 举报
回复
《Windows核心编程》
赵4老师 2018-08-27
  • 打赏
  • 举报
回复
英语也是一门计算机语言的说。
schlafenhamster 2018-08-27
  • 打赏
  • 举报
回复
多加几条 看 奔溃
pDlg->m_lst.InsertItem(pDlg->m_lst.GetItemCount(),...);//在这个地方往listctrl控件里插入数据
pDlg->m_lst.InsertItem(pDlg->m_lst.GetItemCount(),...);//在这个地方往listctrl控件里插入数据
pDlg->m_lst.InsertItem(pDlg->m_lst.GetItemCount(),...);//在这个地方往listctrl控件里插入数据

15,471

社区成员

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

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