Windows核心编程<读书笔记六> 线程
来源:互联网 发布:青岛工资知乎 编辑:程序博客网 时间:2024/06/05 05:37
【文起】亲爱的,想一觉醒来了我就在你身边,爱你。
线程
1、 每个进程至少有一个线程。线程包含:1、线程内核对象;2、线程堆栈(用户维护线程执行代码时需要的所有函数参数和局部变量)
2、 线程需要的开销比进程少,所以尽量应该设法用增加线程来解决编程问题,而非创建新的进程。当然有些时候多个进程更为合理。
3、 编写第一个线程函数。每个线程都必须从进入点函数开始执行,主线程进入点函数是:main、wmain、WinMain、wWinMain
我们的辅助线程,进入点函数如:
DWORD WINAPI ThreadFunc(PVOID pvParam)
线程函数执行任务,到达结尾处并返回。这是线程终止运行,堆栈的内存也释放,同时线程的内核对象使用计数被递减,如果计数降为0,线程的内核对象就会被撤销。
4、 CreateThread函数
之前我们通过CreateProcess函数来创建进程的主线程,如果需要创建一个或者多个辅助函数,那么只要让一个已经在运行的线程来调用CreateThread函数即可。
[注]该函数使用来创建线程的Windows函数,我们Visual C++运行期库函数_beginthreadex
5、 终止线程运行:(跟进程的终止方式比较像哦)
A. 线程函数返回(最好使用这种方法)
B. 通过调用ExitThread函数,线程执行撤销
C. 用同一个进程或者另一个进程中的线程调用TerminateThread函数
D. 包含线程的进程终止运行。
6、 TerminateThread函数,与TerminateProcess一样
7、 _beginthreadex一些要点:
A、 每个线程均获得由C/C++运行期库的堆栈分配的自己的tiddata内存结构
B、 传递给该函数的线程函数的地址保存在tiddate内存块中,传给该函数的参数也保持在该数据块中
C、 _beginthreadex确实从内部调用了CreateThread,因为这是操作系统了解如何创建新线程的唯一方法
D、 当调用CreateThead时,它被告知通过调用_threadstartex而不是pfnStartAddr来启动执行新进程。
E、 如果成功,会像CreateThread一样返回线程句柄,否则返回NULL
8、 如果想创建一个多线程应用程序,记得在编译器命令行上设定/MT或者/MD开关
9、 获取进程或者线程内核对象
HANDLE GetCurrentProcess(); HANDLE GetCurrentThread()
这两个函数都是返回伪句柄。且使用计数不会有任何影响,如果将伪句柄作为参数传递给CloseHandle(),该函数会忽略调用并返回FALSE
10、 获取进程ID或者线程ID
DWORD GetCurrentProcessId(); DWORD GetCurrentThreadId();
11、 将伪句柄转换为实句柄
线程的伪句柄是当前线程的句柄。所以有时候需要转换为实句柄进行操作
函数DuplicateHandle可以执行这一转换
使用该函数会递增特定对象的使用计数,所以完成使用句柄时,应该将该句柄传递给CloseHandle,从而递减对象的使用计数
【文尾】如果这篇文章对您有帮助,请留下您的祝福。谢谢~~- Windows核心编程<读书笔记六> 线程
- 《Windows核心编程》读书笔记六 线程基础
- 《Windows核心编程》读书笔记十六 线程栈
- Windows核心编程笔记(六) 线程
- 《Windows核心编程》读书笔记——Windows线程池
- 《Windows核心编程》读书笔记十一 Windows线程池
- Windows核心编程读书笔记
- Windows 核心编程读书笔记
- Windows核心编程读书笔记
- Windows 核心编程 -- 读书笔记
- windows核心编程读书笔记
- 《Windows核心编程》读书笔记
- 《Windows核心编程》读书笔记
- 【读书笔记】Windows核心编程
- 【读书笔记】windows核心编程
- Windows核心编程<读书笔记八>线程的同步
- Windows核心编程<读书笔记十一>线程池的使用
- Windows核心编程<读书笔记十六>线程的堆栈
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- [FreeBSD]x86地址映射实例
- com技术内幕--读书笔记(3)
- 使用串口线时smit出现Set TERM to an appropriate terminal type or use another terminal.
- 如何用Java来编写可根据SMTP和POP3协议来收发E-mail的Java Applet。
- Windows核心编程<读书笔记六> 线程
- 如何获取一个变量的名字
- jquery calendar
- bochs 在fedora下的配置文件
- Flex事件讲解
- 程序员做业余项目的重要性
- android:adb环境变量的配置
- 创业与公司
- ADO.NET实用经验