为什么mfc主线程执行结束后才执行子线程
1个回答
展开全部
一个程序从入口函数开始运行,知道运行到末尾的 return结束,程序退出。这是一个很正常的过程,如果你不告诉程序停止向下执行语句,他会始终向下执行直到return。
等待事件一般就可以停止运行代码,但是最好不要写在主线程里,容易引起关闭时候不正当现象。
一般windows窗口程序为什么不会有楼主这问题呢,因为窗口程序本身就是一个死循环程序,永远不会自动退出,除非接收到了特定的退出消息。
楼主如果是一个普通的测试程序的话,可以再程序末尾加一个死循环防止程序退出,又处于对性能的考虑,在循环中睡眠10秒。
while(1)
{
Sleep(10000);
}
-----------------
那不应该,对话框程序本身就是一个窗口程序,mfc工程下生成的会有个dlg.DoModal()函数来保持程序不会退出。
当对话框退出的话,那只有以下几种可能:
1. 按下对话框上的 ‘确定’或‘取消’按钮,他会执行对话框类里的虚函数OnOk 或 OnCancel函数,这2个函数都会使对话框退出。
2.按下了窗口'x'按钮,这个和‘取消’差不多。
3.ctrl+alt+del 强行关闭
4.其他非正当错误(比如内存错误,有错误提示)导致的程序崩溃退出。
5.线程发送消息告知主线程退出。(如果不是特意这么写,vc编译器不会自动写的)
线程的正常退出不会影响到其他线程(包括主线程)。
这里只能推测楼主把建立线程写在了 确定 按钮里了吧
等待事件一般就可以停止运行代码,但是最好不要写在主线程里,容易引起关闭时候不正当现象。
一般windows窗口程序为什么不会有楼主这问题呢,因为窗口程序本身就是一个死循环程序,永远不会自动退出,除非接收到了特定的退出消息。
楼主如果是一个普通的测试程序的话,可以再程序末尾加一个死循环防止程序退出,又处于对性能的考虑,在循环中睡眠10秒。
while(1)
{
Sleep(10000);
}
-----------------
那不应该,对话框程序本身就是一个窗口程序,mfc工程下生成的会有个dlg.DoModal()函数来保持程序不会退出。
当对话框退出的话,那只有以下几种可能:
1. 按下对话框上的 ‘确定’或‘取消’按钮,他会执行对话框类里的虚函数OnOk 或 OnCancel函数,这2个函数都会使对话框退出。
2.按下了窗口'x'按钮,这个和‘取消’差不多。
3.ctrl+alt+del 强行关闭
4.其他非正当错误(比如内存错误,有错误提示)导致的程序崩溃退出。
5.线程发送消息告知主线程退出。(如果不是特意这么写,vc编译器不会自动写的)
线程的正常退出不会影响到其他线程(包括主线程)。
这里只能推测楼主把建立线程写在了 确定 按钮里了吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询