进来要进行多线程的编写,复习一下windows多线程。首先从最基础的CreateThread开始学起。
首先看一下函数原型:
HANDLE CreateThread( PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThrea)
参数含义如下:
psa:安全属性,是指向SECURITY_ATTRIBUTES的指针。NULL取默认。
cbStackSize:该线程申请的栈空间。
pfnStartAddr:指向新线程将要执行的线程函数的地址。
dwCreateFlags:控制新线程的额外信息,以后会有说明。
pdwThreadID:存储系统分配给新线程的ID。
下面看一个具体的例子。
#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI FirstThread(PVOID pvParam){
*(int*)pvParam=5;
return(0);
}
int main(){
int x;
DWORD dwThreadId;
HANDLE hThread=CreateThread(NULL,0,FirstThread,&x,0,&dwThreadId);
CloseHandle(hThread);
cout<<x<<endl;
cout<<x<<endl;
system("pause");
return 0;
}
这段程序可以先想想一下输出可能是什么。在我的电脑上执行的结果如下:
从中可以看出新线程的执行时间和主线程的关系。这里要注意的是这个程序时可能出错的。当由于某种原因主线程退出的时候会将x的栈空间删除,如果这时候才进入新线程的话那么x是已经不存在的。编写时请注意这种情况