小弟在学习多线程,按照深入浅出MFC 2 中第14章后面的例程加以完善,遇到问题如下

mdzhao 2005-02-18 10:47:26
小弟在学习多线程,按照深入浅出MFC 2 中第14章后面的例程加以完善,遇到问题如下

用的是 多文档结构应用程序

//目标:需要在线程激活时,在view中绘图
UINT CMltithrdView::ThreadFunc(LPVOID ThreadArg)
{
//现在想出的方法:在这里用pDC->Rectangle()等画图,怎样才能得到dc??
}


因为是在线程中,所以ThreadFunc()是 静态成员函数,那么就不能this来得到dc了,
跪求高人帮忙解决一下,分不够可以在加!!!
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdzhao 2005-02-18
  • 打赏
  • 举报
回复
大概明白了

先去试一下
hyamw 2005-02-18
  • 打赏
  • 举报
回复
最好不要在线程中直接操作GUI,而是发送消息给主线程,由主线程来完成绘制。
因为多个线程同时操作GUI就容易出问题
mdzhao 2005-02-18
  • 打赏
  • 举报
回复
to : steedhorse(晨星)

UINT CMltithrdView::ThreadFunc(LPVOID ThreadArg)
{
CDC* pDC = (CDC*)ThreadArg;
pDC->...
}
不行啊!!运行错误!!
SatanLi1982 2005-02-18
  • 打赏
  • 举报
回复
把this指针通过参数传过去不就得了
晨星 2005-02-18
  • 打赏
  • 举报
回复
UINT CMltithrdView::ThreadFunc(LPVOID ThreadArg)
{
CDC* pDC = (CDC*)ThreadArg;
pDC->...
}
晨星 2005-02-18
  • 打赏
  • 举报
回复
把dc通过ThreadArg传进去。
mdzhao 2005-02-18
  • 打赏
  • 举报
回复
谢谢大家指点,现在又出现新的问题了,

我创建了5个线程,而且他们用的是同一个ThreadFunc(LPVOID ThreadArg),

通过传进去的参数的不同 做不同的事(比如参数为 DWORD _ThreadArg[5]={1,2,3,4,5})。
for(i= 0; i< 5; i++)
_pThread[i] = AfxBeginThread(CMltithrdView::ThreadFunc,&_ThreadArg[i]);

线程函数只能接受一个参数,如果想传进 两个以上的 参数,
是不是要用一个指针数组指向一个自己定义的struct,之后把指针数组的指针传进去呀!??
如:
struct aa
{
int x;
int y;
//等等
}threadarg[5]={..........................};

DWORD *ptr[5];

for(i= 0; i< 5; i++)
{
ptr[i] = (DWORD)&threadarg[i];
AfxBeginThread(CMltithrdView::ThreadFunc,&ptr[i]);

这样好麻烦呀!!有没有什么好办法呀!??

15,467

社区成员

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

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