Windows平台下多线程编程基本步骤
2012-12-03 20:15
531 查看
首先说明一下句柄的概念:一种指向指针的指针。由于Windows是一个以虚拟内存为基础的操作系统,在这种系统环境下,Windows是一个以虚拟内存为基础的操作系统,在系统环境下,windows内存管理器在内存中来回移动对象,对象被移动也就是对象的地址变化了。Windows为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化。对象被移动后,对象新的地址就会告知其句柄来保存。其关系如下:
句柄地址(稳定)->记载着对象在内存中的地址->对象在内存中的地址(不稳定)->实际对象。
1)创建线程:
第一个参数lpThreadAttributes指向一个SECURITY_ATTRIBUTES结构的指针,该结构决定了线程的安全属性,一般置为NULL;
第二个参数dwStackSize指定了线程的堆栈深度,一般都设置为0;
第三个参数lpStartAddress表示新线程开始执行时代码所在函数的地址,即线程的起始地址。每个线程都必须有一个入口点函数,是线程执行的起点。系统创建好进程后,实际上就启动执行了该进程的主线程。主线程的入口点函数是main或WinMain。每个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在程序中创建其他线程。这里ThreadFunc即表示新线程入口函数的函数名。
第四个参数lpParameter指定了线程执行时传送给线程的32位参数,即线程函数的参数;第五个参数dwCreationFlags控制线程创建的附加标志,可以取两种值。如果为0,表示线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直到ResumeThread被调用。第六个参数lpThreadId,当我们创建一个线程时,系统会为这个线程分配一个ID号,在NT/2000下该参数可以设为NULL。即线程的ID号不用返回。
2)线程函数的声明和实现
新线程入口函数的声明和实现形式如下:
3)线程句柄的关闭
每个线程,都有一个线程内核对象的引用计数器,关闭线程的句柄,其内核对象的引用计数就减1。
4)线程之间的同步
线程的同步有以下几种方式:
1)等待函数
2)事件
3)信号量
4)互斥量
句柄地址(稳定)->记载着对象在内存中的地址->对象在内存中的地址(不稳定)->实际对象。
1)创建线程:
HANDLE WINAPI CreateThread(
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);
第一个参数lpThreadAttributes指向一个SECURITY_ATTRIBUTES结构的指针,该结构决定了线程的安全属性,一般置为NULL;
第二个参数dwStackSize指定了线程的堆栈深度,一般都设置为0;
第三个参数lpStartAddress表示新线程开始执行时代码所在函数的地址,即线程的起始地址。每个线程都必须有一个入口点函数,是线程执行的起点。系统创建好进程后,实际上就启动执行了该进程的主线程。主线程的入口点函数是main或WinMain。每个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在程序中创建其他线程。这里ThreadFunc即表示新线程入口函数的函数名。
第四个参数lpParameter指定了线程执行时传送给线程的32位参数,即线程函数的参数;第五个参数dwCreationFlags控制线程创建的附加标志,可以取两种值。如果为0,表示线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直到ResumeThread被调用。第六个参数lpThreadId,当我们创建一个线程时,系统会为这个线程分配一个ID号,在NT/2000下该参数可以设为NULL。即线程的ID号不用返回。
2)线程函数的声明和实现
新线程入口函数的声明和实现形式如下:
DWORD WINAPI ThreadProc(
[in] LPVOID lpParameter
);
DWORD WINAPI ThreadProc( LPVOID lpParameter )
{
return 0;
};
3)线程句柄的关闭
BOOL WINAPI CloseHandle(
__in HANDLE hObject
);
每个线程,都有一个线程内核对象的引用计数器,关闭线程的句柄,其内核对象的引用计数就减1。
4)线程之间的同步
线程的同步有以下几种方式:
1)等待函数
2)事件
3)信号量
4)互斥量
相关文章推荐
- 浅析.Net下的多线程编程,介绍在.Net下进行多线程编程的基本方法和步骤。
- [转]Windows平台下的多线程编程
- Windows平台下多线程编程基础(C++)
- Windows多线程编程 [1] 基本概念
- Windows下多线程编程指南 .
- 基于.NET平台的Windows编程实战
- 基于windows的多线程编程初步介绍
- (一)UDP基本编程步骤
- windows 多线程编程防止死锁的几点经验 (转)
- Windows下多线程编程指南
- Windows平台下用IIS搭建PHP+MYSQL环境之基本设置
- 编程学习基本路线指南(windows)
- 初识windows编程之多线程
- 基于Socket网络编程基本步骤
- 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换
- 【VS2013】windows多线程编程_初次实验
- 关于在windows环境下安装keras框架的基本步骤
- Windows平台的原始套接字编程的知识点概要(备忘)
- 【Windows编程】系列第二篇:Windows SDK创建基本控件