CreateThread是Windows API函数,用于在主线程基础上创建一个新线程,线程终止运行后,仍存在于系统中,需要调用CloseHandle函数类关闭该线程对象。
(1).函数原型与参数说明
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性,一般设置为NULL
DWORDdw StackSize,//堆栈大小,一般采用默认大小,设置为0
LPTHREAD_START_ROUTINE lpStartAddress,//线程函数,一般采用DWORD WINAPI ThreadProc(LPVOID lpParam)形式
LPVOID lpParameter,//线程参数,lpParam传递给线程函数的参数
DWORD dwCreationFlags,//线程创建属性,一般设置为0,立即激活
LPDWORD lpThreadId//线程ID
);
如下是创建线程示例
#include <Windows.h>
#include <iostream>
using namespace std;
typedef struct _STRUCT_DATA_
{
int id; //用于标识出票id
int tickets;
}_DATA,*_pDATA;
DWORD WINAPI Fun1Proc(LPVOID lpParam);
DWORD WINAPI Fun2Proc(LPVOID lpParam);
void main()
{
HANDLE hThread1;
HANDLE hThread2;
_DATA stru_data;
stru_data.id = 0;
stru_data.tickets = 100;
hThread1 = CreateThread(NULL,0,Fun1Proc,&stru_data,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,&stru_data,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(4000);
}
DWORD WINAPI Fun1Proc(LPVOID lpParam)
{
_pDATA data = (_pDATA)lpParam;
while(TRUE)
{
if (data->tickets>0)
{
Sleep(1);
cout<<"id: "<<data->id++<<endl;
cout<<"thread1 sell<< ticket: "<<data->tickets--<<endl;
}
else
break;
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParam)
{
_pDATA data = (_pDATA)lpParam;
while(TRUE)
{
if (data->tickets>0)
{
Sleep(1);
cout<<"id: "<<data->id++<<endl;
cout<<"thread2 sell ticket: "<<data->tickets--<<endl;
}
else
break;
}
return 0;
}
上述创建线程成功,但是还存在一些问题,即线程同步,关于线程同步,后续会继续介绍。