CWinThread对象的存活期?

yby4769250 2011-09-20 09:46:46
CWinThread* m_pThrd;
m_pThrd = AfxBeginThread(RUNTIME_CLASS(CTestThread));

像这样的写法,创建界面线程,但是没有窗口,只是想使用它的消息队列。创建了线程后,该线程对象的生命周期是多少?对象的存储位置是在堆上还是栈上?如果是一个独立的线程空间,那么线程对象的数据成员应该是存储在线程对象自己的栈空间内,还是存储在创建该线程的创建者的栈空间内?Windows这样封装让我搞不明白了。

高分急求!!!
...全文
107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiuzhoulh 2011-09-20
  • 打赏
  • 举报
回复
InitInstance()肯定是在run函数之前调用
ljn398431 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]
线程对象在进程中,直到线程退出或者被终止,再或者进程退出,线程的生命期就结束了.
[/Quote]同意
yby4769250 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oyljerry 的回复:]

进程会为线程分配各自的栈空间,线程中分配在堆上的数据在进程中.
[/Quote]

另外一个问题:InitInstance()这个函数是何时被调用的?是在构造函数之后,run函数之前调用?还是,在构造函数之前就调用了?
oyljerry 2011-09-20
  • 打赏
  • 举报
回复
进程会为线程分配各自的栈空间,线程中分配在堆上的数据在进程中.
oyljerry 2011-09-20
  • 打赏
  • 举报
回复
线程对象在进程中,直到线程退出或者被终止,再或者进程退出,线程的生命期就结束了.
凤矶 2011-09-20
  • 打赏
  • 举报
回复
如果你没有显式地结束它,那么这个线程会由进程在进程销毁前结束。动态创建的都在堆上。
栈空间是由进程管理的,“线程栈空间”没有这种说法。对象的成员所在的位置还是在为线程对象分配的空间内部。
ouyh12345 2011-09-20
  • 打赏
  • 举报
回复
AfxBeginThread creates a new CWinThread object, calls its CreateThread function to start executing the thread, and returns a pointer to the thread.
To end the thread, call AfxEndThread from within the thread, or return from the controlling function of the worker thread.

在堆上创建的,线程退出或调用AfxEndThread,m_pThrd就无效了。
每个线程都有独立的栈
ouyh12345 2011-09-20
  • 打赏
  • 举报
回复
一般用_beginthreadex

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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