多线程,堆,栈,参数的传递。有一些不明白的地方。
描述:
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线程栈里的内容的。
这是为什么?