1)全部由线程函数产生的C++对象都能正确地调用它们的析构函数,从而实现内存资源的释放。
2)操作系统将正确的释放线程运行栈所使用的内存。
3)在线程文护的内核对象中有退出代码成员,系统会把其设定为线程函数的返回值[8]。
4)系统将该线程内核对象的使用计数递减
1. ExitThread函数
此函能够在调用后强制结束线程的运转。操作系统资源的清理任务将由操作在此函数调用后完成。可是,它无法回收C++资源,比如类对象。一般情况下,这种方式是Windows调用来撤销线程。
2. TerminateThread函数
此函数与ExitThread不同,虽然它也能让线程终止,但是它能够终止任何线程,而ExitThread函数只能终止调用的线程。而且TerminateThread函数是异步运行的,在你调用此函数终止线程时,此函数不能确保线程在函数返回时能被终止。TerminateThread函数 强制终止线程,几乎没给线程做结束处理工作的时间。这将导致线程不能够在结束前释放占有的资源。该函数不会向目标线程发送终止信号,而是直接在核心终止线程。这个带来的另一个后果就是内存泄露,因为线程的堆栈得不到释放。
根据上面的讨论,本设计选择使用方法1,具体如下。在程序代码中建立一个标号,通过判断它的值来让线程结束自身。这个技术有十分明显的优点,可以保证目标线程在结束之前有安全而一致的状态。它有个明显的缺点:线程必须通过问询方式,不时地检测标号值,从而判断是否该结束自身。本设计不会忙等的循环来检测标号值,本设计中采取的做法是使用一个手动重置(manual-reset)的event 对象。工作线程功过检测该event对象的状态采取相应的操作。
2.5 MFC连接SQL SERVER(ODBC方式)
在ODBC中,应用程序不能直接对数据库进行访问,它必须通过使用数据源名(DSN)通过ODBC管理器和数据库交换信息。
所谓数据源就是数据库位置,数据库类型以及ODBC驱动程序等信息的集合。数据源负责将运行结果送回应用程序[9]。 MFC员工反应时间检测评测系统的实现(4):http://www.751com.cn/jisuanji/lunwen_13193.html