主线程退出时,会首先去结束其他线程吗?

linsj585 2011-09-17 05:42:47
如果我在主线程里创建一个线程A,线程A需要调一个静态对象的成员函数,并且调用主窗口的几个成员函数;

这样子会有问题吗?
...全文
983 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
easy_fefrry 2013-07-11
  • 打赏
  • 举报
回复
大家的回答都很精彩,受用! 其实大家的回答,是你一句我一句的交流。 后来者看了过后,交流会越来越深入。 受用。谢谢各位 !
jackson35296 2011-09-26
  • 打赏
  • 举报
回复
有些编程架构会结束,有些架构不会结束,有些架构可配置。主线程其实也仅仅是一个线程,有些架构下,主线程结束的时候去调用ExitProcess,会导致其他线程也被终止,但是有些架构只是调用ExitThread,这样其他线程不会终止,需要手动终止。
linsj585 2011-09-26
  • 打赏
  • 举报
回复
瞧我提的什么问题
你说你们该回答我标题的“不会先结束其他线程”呢,还是回答我帖子内容 的“会有问题”。。。

哈,结贴
ouyh12345 2011-09-22
  • 打赏
  • 举报
回复
进程是静态的,当有线程存在时,进程就不会结束
主线程退出时,并不会主动去结束其它线程
kyotrue 2011-09-22
  • 打赏
  • 举报
回复
不会的,你自己不写代码手动处理的话,各线程之间是没有任何关联的,程序结束时其他未正常退出的线程会被OS强制结束
quwei197874 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zaccheodong 的回复:]
windows核心编程中有讲的,第69页:
“Windows Platform SDK文档声明,进程要等到所有线程终止运行之后才终止运行。就操作
系统而言,这种说法是对的。但是, C / C + +运行期对应用程序采用了不同的规则,通过调用
E x i t P r o c e s s,使得C / C + +运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还……
[/Quote]++
zacc 2011-09-22
  • 打赏
  • 举报
回复
windows核心编程中有讲的,第69页:
“Windows Platform SDK文档声明,进程要等到所有线程终止运行之后才终止运行。就操作
系统而言,这种说法是对的。但是, C / C + +运行期对应用程序采用了不同的规则,通过调用
E x i t P r o c e s s,使得C / C + +运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还有其他线程在运行。不过,如果在进入点函数中调用E x i t T h r e a d,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”

我同意12楼的说法。可以写一个测试代码

#include <process.h> /* _beginthread, _endthread */
#include <windows.h>
unsigned __stdcall _threadfun(void* pParam)
{
while(TRUE)
{
Sleep(10);
}
}


void main()
{
unsigned uThreaID;
_beginthreadex(NULL,0,_threadfun,NULL,NULL,&uThreaID);
//不调用ExitThread,主线程执行完成退出,crt会终止所有的线程,进程就得以退出
//如果调用了ExitThread退出主线程,crt不会终止其他的线程,虽然主线程退出了,进程仍然在
//ExitThread(1);
}



百事烟 2011-09-21
  • 打赏
  • 举报
回复
先结束线程,再结束主线程

方法有很多,wait,公共变量都可以
alexander_david 2011-09-21
  • 打赏
  • 举报
回复
9楼、12楼。
saiyaman5 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]

进程和线程的关系就相当于老公和老婆一样。主线程就是大老婆,他管理这进程的所有其他姨太太。
[/Quote]

相当正确
dd4979590 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]
进程和线程的关系就相当于老公和老婆一样。主线程就是大老婆,他管理这进程的所有其他姨太太。
[/Quote]

的确很V5...
yyxaf 2011-09-21
  • 打赏
  • 举报
回复
学习中....
cczlp 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wlxu1209 的回复:]
看来有多个版本的解释啊,有没有砖家出来引经据典一锤定音叻?
[/Quote]
为啥要引经据典,这个很容易试的.说会的人,是自己没有试过
smwhotjay 2011-09-21
  • 打赏
  • 举报
回复
不会。。其他线程若引用了全局的对象,则会报错拉.
明寿 2011-09-21
  • 打赏
  • 举报
回复
看来有多个版本的解释啊,有没有砖家出来引经据典一锤定音叻?
cczlp 2011-09-21
  • 打赏
  • 举报
回复
不会。 如果你不显示的结束其它线程, 主线程不会处理。 只能留到最后Windows替你收拾其它线程这些垃圾。
suiwa 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sinservice 的回复:]

其实根本没有所谓主线程,只不过是因为一开始的那个线程调用了CRT的入口函数,当CRT入口函数返回时,会调用系统,停止其他线程。
[/Quote]
这个是正解
「已注销」 2011-09-18
  • 打赏
  • 举报
回复
其实根本没有所谓主线程,只不过是因为一开始的那个线程调用了CRT的入口函数,当CRT入口函数返回时,会调用系统,停止其他线程。
baby393 2011-09-18
  • 打赏
  • 举报
回复
Windows 系统没有主线程和子线程之分只是启动顺序不同而已,所谓的主线程只是因为它是第一个线程序而已,由它启动的其它线程的地位跟它是没有分别的,也即是说所谓的主线程结束后程序不一定需要结束。
gold_water 2011-09-18
  • 打赏
  • 举报
回复
主线程退出后,就一切都完了,意味着进程结束即应用程序就此结束了;所以...
加载更多回复(9)

15,467

社区成员

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

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