treeCtrl的GetItemData(),需要用到消息循环?

进击的菠萝 2020-09-10 07:04:02
今天在子线程操作树形控件,在调用GetItemData()时,发现代码卡住不动了


主线程:
...

AfxBeginThread(f_fun_Thread, );
Sleep(30000);

子线程:
f_fun_Thread{
m_tree->GetItemData(hItem); -->卡住不动,等主线程Sleep(30000);结束后才往下跑
}

后来在主线程做消息转发,子线程就正常了
AfxBeginThread(f_fun_Thread, );
int count = 0;
while(count++ < 60){
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(500);
}

所以GetItemData需要消息循环???
...全文
196 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
psbeond 2020-09-24
  • 打赏
  • 举报
回复
对win32控件的一切操作,都是通过发送消息实现的。
Eleven 2020-09-24
  • 打赏
  • 举报
回复
工作线程中就不要直接去操作UI线程中的子窗口控件了~
schlafenhamster 2020-09-23
  • 打赏
  • 举报
回复
在子线程中 sleep,
主线程 sleep ,使线程 停止 运行 什么也干不了 !
进击的菠萝 2020-09-11
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
m_tree 在主线程 ?
Sleep(30000); 主线程 不 运行 !

m_tree 是在主线程new的,已经把指针传到子线程里面了,
在主线程sleep的期间,子线程无法操作m_tree吗?
schlafenhamster 2020-09-11
  • 打赏
  • 举报
回复
m_tree 在主线程 ?
Sleep(30000); 主线程 不 运行 !

15,980

社区成员

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

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