1)线程的基础知识
来源:互联网 发布:新浪云数据库怎么连接 编辑:程序博客网 时间:2024/06/14 14:18
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa, //该线程内核对象的默认安全属性,通常传递为NULL
DWORD cbStack, //设定线程可以将多少地址空间用于它自己的堆栈
PTHREAD_START_ROUTINE pfnStartAddr, //线程执行的线程函数的地址
PVOID pvParam, //与线程函数的pvParam参数相同
);
一)当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
系统从进程的地址空间分配内存,供线程的堆栈使用。新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易地相互通信。
二)终止线程的运行
(1)线程函数返回(最好使用这种方法)
当想要线程终止运行时,他们能够返回。
如果线程能够返回,可以确保以下事项的实现:
*在线程中创建的所有c++对象均正确的撤销
*操作系统正确地释放线程堆栈使用的内存‘
*系统将线程的退出代码设置为线程函数的返回值
*系统将递减线程内核对象的使用计数
(2)ExitThread函数,线程将自行撤销(最好不要使用这种方法)
Void ExitThread(DWORD dwExitCode);
函数终止线程的运行,操作系统将清除该线程使用的所有系统资源。但是,c++资源(如c++类对象)将不被撤销。
(3)同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)
Bool TerminateThread(HANDLE hThread,DWORD dwExitCode);
与ExitThread不同,ExitThread总是撤销调用的线程,TerminateThread能够撤销任何线程。当线程终止运行时,他的退出代码成为你作为dwExitCode的参数传递的值。
同时,线程的内核对象的使用计数也被递减。
注意:TerminateThread函数是异步运行的函数,也就是说,他告诉系统想要线程终止运行,但是,当函数返回时,不能保证线程被撤销。
(4)包含线程的进程终止运行(应该避免使用这种方法)
PSECURITY_ATTRIBUTES psa, //该线程内核对象的默认安全属性,通常传递为NULL
DWORD cbStack, //设定线程可以将多少地址空间用于它自己的堆栈
PTHREAD_START_ROUTINE pfnStartAddr, //线程执行的线程函数的地址
PVOID pvParam, //与线程函数的pvParam参数相同
DWORD fdwCreate,//设定用于控制创建线程的其他标志。如果该值是0,线程创建后立即进行调度。如果
是CREATE_SUSPENDE,系统完整的创建线程并进行初始化,但是要暂停该线程的运行。
PDWORD pdwThreadID //系统分配给新线程的ID);
一)当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
系统从进程的地址空间分配内存,供线程的堆栈使用。新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易地相互通信。
二)终止线程的运行
(1)线程函数返回(最好使用这种方法)
当想要线程终止运行时,他们能够返回。
如果线程能够返回,可以确保以下事项的实现:
*在线程中创建的所有c++对象均正确的撤销
*操作系统正确地释放线程堆栈使用的内存‘
*系统将线程的退出代码设置为线程函数的返回值
*系统将递减线程内核对象的使用计数
(2)ExitThread函数,线程将自行撤销(最好不要使用这种方法)
Void ExitThread(DWORD dwExitCode);
函数终止线程的运行,操作系统将清除该线程使用的所有系统资源。但是,c++资源(如c++类对象)将不被撤销。
(3)同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)
Bool TerminateThread(HANDLE hThread,DWORD dwExitCode);
与ExitThread不同,ExitThread总是撤销调用的线程,TerminateThread能够撤销任何线程。当线程终止运行时,他的退出代码成为你作为dwExitCode的参数传递的值。
同时,线程的内核对象的使用计数也被递减。
注意:TerminateThread函数是异步运行的函数,也就是说,他告诉系统想要线程终止运行,但是,当函数返回时,不能保证线程被撤销。
(4)包含线程的进程终止运行(应该避免使用这种方法)
阅读全文
0 0
- 1)线程的基础知识
- 1 线程的基础知识(上)
- 2 线程的基础知识(中)
- java线程的基础知识(基础篇)
- java并发线程的基础知识(一)
- 线程的基础知识
- 线程的基础知识【转帖】
- 线程的基础知识
- 线程的基础知识(ZT)
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- 线程的基础知识
- Leveldb源码解析第二篇【Meta Block】
- 如何在ubuntu上安装node.js
- Bézier Spline Curves
- 【Java基础 一】---基础语法
- win32汇编清空键盘缓冲区
- 1)线程的基础知识
- 【解决方案】关于js 39.8*100=3979.9999999999995
- maven
- 书籍网站
- 在maven项目里引进jar包
- ActiveMQ知识巩固
- Leveldb源码解析第三篇【sstable 收尾】
- Go学习笔记03
- 写论文时的一些高大上词句