Windows核心编程学习笔记(9)--线程创建与结束线程
2012-10-18 16:07
183 查看
Drecik学习经验分享
转载请注明出处:/article/3712375.html
注意:函数名可以自己取。线程函数应该尽可能使用函数参数和局部变量。
线程结束有以下四种方式,但只建议发生在第一种情况下
线程函数返回
通过调用ExitThread函数杀死自己(避免)
同一个进程或另一个进程中的线程调用TerminateThread函数(避免)
包含该线程的进程终止运行(避免)
设计线程函数时候,应该确保在我们希望线程终止运行时,就让它们返回,这是保证线程的所有资源都被正确清理的唯一方式,否则只能等到进程结束时操作系统来清理。
线程函数返回时,可保证以下清理操作:
线程函数中创建的所有C++对象调用其析构函数
操作系统正确释放线程栈使用的内存
操作系统把线程的退出代码设为线程函数的返回值
系统递减线程的内核对象的使用计数
线程终止运行时,操作系统所做的事情:
该线程拥有的所有用户对象句柄会被释放
线程的退出代码从STILL_ACTIVE编程传递给ExitThread或TerminateThread的代码
线程内核对象的状态变为触发
如果线程是进程中最后一个活动线程,系统认为进程也终止了
线程内核对象的使用计数减1
其他线程可以使用GetExitCodeThread来检查线程的退出代码,没有退出会得到STILL_ACTIVE
转载请注明出处:/article/3712375.html
创建线程之前的准备
每个线程必须有一个入口点函数,这个是线程执行的起点,所以创建线程前必须先声明或定义,函数原型DWORD WINAPI ThreadFunc( PVOID pParam );
注意:函数名可以自己取。线程函数应该尽可能使用函数参数和局部变量。
创建线程
在Windows编程中可以使用函数CreateThread,但是如果写C/C++代码应该使用_beginthreadexHANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性; SIZE_T dwStackSize, // 栈的大小; LPTHREAD_START_ROUTINE lpStartAddress, // 线程入口点函数; LPVOID lpParameter, // 传给线程入口点函数的参数,可以传入希望线程获得的数据; DWORD dwCreationFlags, // 创建的线程是否挂起,0为不挂起,CREATE_SUSPENDED为挂起; LPDWORD lpThreadId // 返回线程的ID,建议使用句柄操作,所以传入NULL即可; );
结束线程
线程结束有以下四种方式,但只建议发生在第一种情况下线程函数返回
通过调用ExitThread函数杀死自己(避免)
同一个进程或另一个进程中的线程调用TerminateThread函数(避免)
包含该线程的进程终止运行(避免)
设计线程函数时候,应该确保在我们希望线程终止运行时,就让它们返回,这是保证线程的所有资源都被正确清理的唯一方式,否则只能等到进程结束时操作系统来清理。
线程函数返回时,可保证以下清理操作:
线程函数中创建的所有C++对象调用其析构函数
操作系统正确释放线程栈使用的内存
操作系统把线程的退出代码设为线程函数的返回值
系统递减线程的内核对象的使用计数
线程终止运行时,操作系统所做的事情:
该线程拥有的所有用户对象句柄会被释放
线程的退出代码从STILL_ACTIVE编程传递给ExitThread或TerminateThread的代码
线程内核对象的状态变为触发
如果线程是进程中最后一个活动线程,系统认为进程也终止了
线程内核对象的使用计数减1
其他线程可以使用GetExitCodeThread来检查线程的退出代码,没有退出会得到STILL_ACTIVE
相关文章推荐
- 线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()
- WIN32多线程一 用WIN32 API创建和结束线程(转)
- 创建线程和结束线程
- CompletionService 创建多线程,并返回全部线程处理结束后的结果
- 初识pthread(一)-线程管理之创建/结束线程
- AfxBeginThread: Worker线程的创建和结束
- vc 线程的创建,暂停和结束
- Linux 线程的创建与结束
- 线程初步(1)—— 线程的创建、参数和返回值、结束、状态、取消
- win32多线程 (一) 线程创建与结束等待
- 在你的服务器端代码中使用线程和创建异步处理(结束)
- AfxBeginThread创建和事件对象结束线程的方法
- vc 线程的创建,暂停和结束
- vc 线程的创建、暂停和结束
- 线程的创建和结束的方法
- linux c 线程的创建与结束 (传参和返回值)
- 一起talk C栗子吧(第一百零八回:C语言实例--线程创建与结束一)
- Java创建与结束线程代码示例
- Java创建和结束线程
- 控制台创建两个线程,等待一个线程的结束,执行另外一线程