在线程内使用控件的问题.

zhhunicorn 2006-01-09 05:13:49
CListCtrl listView;
//CThreadView.cpp
int CThreadView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{创建列表控件;}

CThreadView::FillList(int x,inty,int z)
{ 填写列表控件;}
UINT ReadThreadProc(LPVOID param)
{

for(int m=0;m<10;++m)
{
int x,y,z;
x=y=z=m;
((CThreadView*)param)->FillList(x,y,z);
}
return 0;
}

void CThreadView::OnStartthread()
{
HWND hwnd=GetSafeHwnd();
AfxBeginThread(ReadThreadProc,hwnd);
}
我这样子在线程内调用FillList(...)可以吗?
我运行时出现"Debug Assertion Failed"的提示框,请问怎么解决?


...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhhunicorn 2006-01-10
  • 打赏
  • 举报
回复
晕,我的帖子已经结了,怎么还在"非解决".
zhhunicorn 2006-01-09
  • 打赏
  • 举报
回复
非常的明白啦.谢谢!
handsomerun 2006-01-09
  • 打赏
  • 举报
回复
那这个HWND hwnd=GetSafeHwnd()得到的参数代表什么?

得到的是,你某个窗口的句柄


如果我要访问其他类的成员是不是这样子就可以了
AfxBeginThread(ReadThreadProc,其他类* 指针);

可以这样理解
比如你有个控件
比如CListCtrl
那么你把这个控件的指针传递进去,那么就可以在线程里面对这个控件进行操作啦
zhhunicorn 2006-01-09
  • 打赏
  • 举报
回复
如果我要访问其他类的成员是不是这样子就可以了
AfxBeginThread(ReadThreadProc,其他类* 指针);
zhhunicorn 2006-01-09
  • 打赏
  • 举报
回复
那这个HWND hwnd=GetSafeHwnd()得到的参数代表什么?
handsomerun 2006-01-09
  • 打赏
  • 举报
回复
一般传递this指针是用得很多的方法

因为线程函数都是static的类成员函数

没法访问创建线程的类成员

所以在一个类里面创建线程的时候,把类的this传递进去
那么通过这个方法,就能访问类的成员了
handsomerun 2006-01-09
  • 打赏
  • 举报
回复
“什么情况下使用什么参数吗?


应该这么说,你要怎么用,用哪个参数就传哪个参数

这里,你要调用你的view类,那么把view类的this指针传递进去

就可以通过
((CThreadView*)param)->FillList(x,y,z);

调用你view类的成员函数

因为这时候这个param就相当于你view的this指针

如果你传hwnd进去,就当然不能这么调用咯
zhhunicorn 2006-01-09
  • 打赏
  • 举报
回复
成了!
能麻烦告诉我一下,什么情况下使用什么参数吗?
MSDN看的有点晕乎乎的.
cpio 2006-01-09
  • 打赏
  • 举报
回复
AfxBeginThread(ReadThreadProc,this);

15,472

社区成员

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

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