VC创建子线程,返回后主进程也结束了

VC创建子线程,返回后主进程也结束了,第1张

一个程序从入口函数开始运行,知道运行到末尾的 return结束,程序退出。这是一个很正常的过程,如果你不告诉程序停止向下执行语句,他会始终向下执行直到return。

等待事件一般就可以停止运行代码,但是最好不要写在主线程里,容易引起关闭时候不正当现象。

一般windows窗口程序为什么不会有楼主这问题呢,因为窗口程序本身就是一个死循环程序,永远不会自动退出,除非接收到了特定的退出消息。

楼主如果是一个普通的测试程序的话,可以再程序末尾加一个死循环防止程序退出,又处于对性能的考虑,在循环中睡眠10秒。

while(1)

{

Sleep(10000);

}

-----------------

那不应该,对话框程序本身就是一个窗口程序,mfc工程下生成的会有个dlgDoModal()函数来保持程序不会退出。

当对话框退出的话,那只有以下几种可能:

1 按下对话框上的 ‘确定’或‘取消’按钮,他会执行对话框类里的虚函数OnOk 或 OnCancel函数,这2个函数都会使对话框退出。

2按下了窗口'x'按钮,这个和‘取消’差不多。

3ctrl+alt+del 强行关闭

4其他非正当错误(比如内存错误,有错误提示)导致的程序崩溃退出。

5线程发送消息告知主线程退出。(如果不是特意这么写,vc编译器不会自动写的)

线程的正常退出不会影响到其他线程(包括主线程)。

这里只能推测楼主把建立线程写在了 确定 按钮里了吧

很简单,一行代码就够了。在窗体的FormClosing()事件中写下:

ApplicationExit();

该方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。

如果ApplicationExit()都不行,很可能是你的程序有问题,存在违规使用非托管资源的情况,可以来点狠的,直接结束掉你的程序进程。

Process p = ProcessGetCurrentProcess();

pKill();

貌似没有直接的办法。

你的问题也有点前后矛盾。

窗口句柄、进程句柄、主线程句柄是不同出概念。

但这些都可以通过枚举获得。如果是主线程句柄,你可以枚举系统中的进程,找到你所需要的进程句柄,然后通过进程句柄获得主线程句柄。

如果是窗口,可以通过枚举系统中所有的窗口,逐个比较,得到你所需要的窗口句柄。当然如果窗口特征很明显,还可以用FindWindow省去逐个枚举的麻烦。

以上就是关于VC创建子线程,返回后主进程也结束了全部的内容,包括:VC创建子线程,返回后主进程也结束了、c# 中在不是主线程的窗体中点X关闭整个程序、怎么从线程中创建对话框中获得主线程的窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10157797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存