最近在学习多线程编程,以下是一些关于多线程编程函数的一些总结。
在C++11被提出来之前,pthread 线程函数并未在c++提供,并且C++语言本身并没有提供太多的关于多线程编程的
机制,但是在未使用pthread 之前的一段时间中,Windows 为我们提供了相关的API 函数,来创建线程。
1.Handle 函数实现多线程编程的实例
/* 首先是关于一些关键字的理解*/
/*在C++11之前,C++中 并没有指定pthread函数,使用的是window.h中的HANDLE 来创建的多线程*/
#include<iostream>
#include<Windows.h>
using namespace std;
//DWORD表示的是无符号的整型,
//WINAPI 的使用是操作系统中可用内核应用程序编程接口的乘法,它的设计师有C++/C 程序的调用,
//是应用软件与Windows系统最直接的交互方式
//typedef void far *LPVOID;
//far表示的是远指针,通常是在16位系统中使用的标注针指针是个远指针的修饰符
//但是在32位的操作系统中已经废弃了。远指针所指的是所指的地址超过了64K,所以需要使用DS
//加偏移量的方法来寻址,而不能直接寻址。其反义是near
//CreateThread()
//CloseHandle() close 关闭包括文件、文件映射、进程、线程、安全和同步对象
//在CreateThread 成功之后会返回一个hThread的handle,且内核对象计数加一,
//引用计数减一,当变为0时,系统删除内核对象。
//若在线程执行完成之后,没有调用closeHandle,在晋城执行期间,将会造成内核对象的泄露,相当于句柄//的泄露,但不同于内存泄露,这势必会对系统的效率
//带来一定的负面的影响,当进程结束退出之后,系统会自动的清理这些资源
DWORD WINAPI FUN(LPVOID lpParamter){
for (int i = 0; i < 10; i++){
cout << "A Thread Fun Display" << endl;
}
return 0L;//表示的是返回的是一个长整型的0
}
int main(){
HANDLE hpThread = CreateThread(NULL, 0, FUN, NULL, 0, NULL);
CloseHandle(hpThread);
for (int i = 0; i < 10; i++){
cout << "Main Thread Display" << endl;
}
return 0;
}