调用PostQuitMessage(1)结束一个线程,为什么会结束整个应用程序? PostQuitMessage本来就是结束程序的。结束线程可以用ExitThread(dwExitCode); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 4. 如何终止线程的运行?(1) 线程函数返回(最好使用这种方法)。这是确保所有线程资源被正确地清除的唯一办法。如果线程能够返回,就可以确保下列事项的实现:•在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消。•操作系统将正确地释放线程堆栈使用的内存。•系统将线程的退出代码设置为线程函数的返回值。•系统将递减线程内核对象的使用计数。(2) 调用ExitThread函数(最好不要使用这种方法)。该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++资源(如C++类对象)将不被撤消。(3) 调用TerminateThread函数(应该避免使用这种方法)。TerminateThread能撤消任何线程。线程的内核对象的使用计数也被递减。TerminateThread函数是异步运行的函数。如果要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或者类似的函数。当使用返回或调用ExitThread的方法撤消线程时,该线程的内存堆栈也被撤消。但是,如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈。(4) 包含线程的进程终止运行(应该避免使用这种方法)。由于整个进程已经被关闭,进程使用的所有资源肯定已被清除。就像从每个剩余的线程调用TerminateThread一样。这意味着正确的应用程序清除没有发生,即C++对象撤消函数没有被调用,数据没有转至磁盘等等。一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调用GetExitcodeThread来检查由hThread标识的线程是否已经终止运行。如果它已经终止运行,则确定它的退出代码。 其实最好自制几个消息例如:WM_START,WM_EXITTHEAD等等;在你的线程函数里收到消息后判断是否为WM_EXITTHEAD,如果是,则返回,即结束了此线程 MFC中,动态分割了几个窗口,怎么可以让他随着画图大小的变化而变化? 使用VS2008写的MFC程序,如何生成可执行文件之后,在没有安装VS2008的机器上运行? 如何取QQ音乐播放状态? 请问如何在CEdit控件中令某些字的颜色不一样? 关于lib的问题 一个工作者线程处理函数只能声明成全局的吗? 二百以内质数加和怎么编程V++ C++里定时相关,如何处理? Cximage的怎样调整gif的压缩比? MFC对话框无法在一出现的时候就显示直方图 在对话框中何时,在何处可以往combo中添加数据 急救:Help me!!!
(1) 线程函数返回(最好使用这种方法)。
这是确保所有线程资源被正确地清除的唯一办法。
如果线程能够返回,就可以确保下列事项的实现:
•在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消。
•操作系统将正确地释放线程堆栈使用的内存。
•系统将线程的退出代码设置为线程函数的返回值。
•系统将递减线程内核对象的使用计数。
(2) 调用ExitThread函数(最好不要使用这种方法)。
该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++资源(如C++类对象)将不被撤消。
(3) 调用TerminateThread函数(应该避免使用这种方法)。
TerminateThread能撤消任何线程。线程的内核对象的使用计数也被递减。TerminateThread函数是异步运行的函数。如果要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或者类似的函数。当使用返回或调用ExitThread的方法撤消线程时,该线程的内存堆栈也被撤消。但是,如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈。
(4) 包含线程的进程终止运行(应该避免使用这种方法)。
由于整个进程已经被关闭,进程使用的所有资源肯定已被清除。就像从每个剩余的线程调用TerminateThread一样。这意味着正确的应用程序清除没有发生,即C++对象撤消函数没有被调用,数据没有转至磁盘等等。
一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调用GetExitcodeThread来检查由hThread标识的线程是否已经终止运行。如果它已经终止运行,则确定它的退出代码。
在你的线程函数里收到消息后判断是否为WM_EXITTHEAD,如果是,则返回,
即结束了此线程