多线程,堆,栈,参数的传递。有一些不明白的地方。

HongHuer 2003-01-07 09:46:45
描述:

MFC。
主线程(user interface thread),两个work thread。

eg:

UINT UserInterfaceThread()
{
CMySocket socket; //================================ 1 处
::AfxBeginThread(WorkThread1, (LPVOID)&socket);
}

UINT WorkThread1(LPVOID pParam)
{
CMySocket * pSocket1 = (CMySocket *)pParam;

CMySocket * pSocket2; //================================ 2 处

::AfxBeginThread(WorkThread2, (LPVOID)pSocket2);
}

UINT WorkThread2(LPVOID pParam)
{
CMySocket * pSocket = (CMySocket *)pParam;
}

1 关于 1 处的问题。
只有在堆里(使用 new )分配或者是在全局数据区(定义全局变量)分配
CMySocket 对象,在WorkThread1中
CMySocket * pSocket1 = (CMySocket *)pParam;才能正确的传递这个对象的
指针(各种属性传递都是对的)
这点我可以理解。

2 关于 2 处的问题。
在 2 处,我是在WorkThread1线程里面(WorkThread1线程的栈里)分配的对象指
针,实践证明,在WorkThread2线程里面是可以正确接受到这个对象的指针的。


主要问题:
我不明白的问题是:
WorkThread2线程里面是 不应该 能访问WorkThread1线程栈里的内容的。
这是为什么?
...全文
47 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
HongHuer 2003-01-21
  • 打赏
  • 举报
回复
不是吧。

今天17:00给分。
HongHuer 2003-01-21
  • 打赏
  • 举报
回复
结。
HongHuer 2003-01-10
  • 打赏
  • 举报
回复
不是吧。
alornwolf 2003-01-10
  • 打赏
  • 举报
回复
同意: rtdb(东临碣石) ( )
HongHuer 2003-01-10
  • 打赏
  • 举报
回复
up
GunRoses 2003-01-08
  • 打赏
  • 举报
回复
各个线程有自己的堆栈,在WorkThread1里,分配CMySocket的指针,传递给Workthead2,是没有问题的,关键是,这个指针所指对象的位置,如果在WorkThread1的栈上分配,那么很有可能会出现访问错误,视两个线程执行情况而定,如果在堆上分配,那么访问没有问题
HongHuer 2003-01-08
  • 打赏
  • 举报
回复
to rtdb(东临碣石)

我昨天在下班回家的公气上想到:

UINT UserInterfaceThread()
{
CMySocket socket; //================================ 1 处
::AfxBeginThread(WorkThread1, (LPVOID)&socket);
}

UINT WorkThread1(LPVOID pParam)
{
CMySocket * pSocket1 = (CMySocket *)pParam;

CMySocket * pSocket2; //================================ 2 处

::AfxBeginThread(WorkThread2, (LPVOID)pSocket2);
}


WorkThread1也是UserInterfaceThread的子线程,但是为什么不能共享主线程的资源呢?
(在栈里分配空间就不行呢?)
ai0ai 2003-01-07
  • 打赏
  • 举报
回复
小心死锁,记得届定你的临界
HongHuer 2003-01-07
  • 打赏
  • 举报
回复
bt 是什么意思啊?

看到了,但不知道是什么?

:)
ajn_sailing 2003-01-07
  • 打赏
  • 举报
回复
bt
HongHuer 2003-01-07
  • 打赏
  • 举报
回复
WorkThread2相当于WorkThread1的子线程。
它当然可以共享主线程的资源。

受益!
谢谢!


rtdb 2003-01-07
  • 打赏
  • 举报
回复
在这里,
WorkThread2相当于WorkThread1的子线程。
它当然可以共享主线程的资源。

实际上, 各个线程均可共享资源(除非一些线程相关特定的资源)。
唯一要注意的是资源的生存周期。

HongHuer 2003-01-07
  • 打赏
  • 举报
回复
有什么不好的。

请说清楚。

我实际操作的很好啊。
ixMind 2003-01-07
  • 打赏
  • 举报
回复
传socket类不好吧,还是传socket句柄
yydyqy 2003-01-07
  • 打赏
  • 举报
回复
gz

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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