C++多线程一

时间:2021-06-21 17:26:24

CreateThread()创建一个新的线程。

ExitThread()正常的结束一个线程的执行。

CloseHandle()关闭一个线程的句柄。

CreateThread()函数原型如下:

HANDLE  WINAPI CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性,(NULL表示不能被子进程继承)

SIZE_T dwStackSize, //线程堆栈初始化大小,默认为0

LPTHREAD_START_ROUTINE lpStartAddress, //线程函数

LPVOID lpParameter,  //线程参数

DWORD dwCreationFlags,//创建方式(0:表示立即执行)

LPDWORD lpThreadId  //线程标识符(该指针存储线程创建后返回的线程标识符)

);

线程函数的格式必须:

DWORD WINAPI threadName(LPVOID lpParamter);

// lpParamter为CreateThread()传递给线程函数的参数,函数返回值为函数是否正常结束的标志。

句柄对线程对象有完全的访问权,句柄可以被子进程继承。线程句柄在其被关闭前一直是有效的,既是句柄所代表的线程已全部被终止,所以必须调用CloseHandle()显式的关闭一个句柄。

#include <iostream>
#include <windows.h> bool repeat=true; DWORD WINAPI mythread1(LPVOID lpParamter)
{
while(repeat)
{
std::cout<<"How are you?"<<std::endl;
Sleep();
}
DWORD exitCode;
ExitThread(exitCode);
return ;
} DWORD WINAPI mythread2(LPVOID lpParamter)
{
while(repeat)
{
std::cout<<"very well!"<<std::endl;
Sleep();
}
DWORD exitCode;
::ExitThread(exitCode);
return ;
} DWORD WINAPI killthread(LPVOID lpParamter)
{
repeat=false;
return ;
} int main()
{
HANDLE handle1,handle2,handle3;
DWORD dw1,dw2,dw3;
handle1=::CreateThread(NULL,,mythread1,NULL,,&dw1);
if(handle1==NULL)
{
std::cout<<"create thread1 failed!"<<std::endl;
return -;
} handle2=::CreateThread(NULL,,mythread2,NULL,,&dw2);
if(handle2==NULL)
{
std::cout<<"create thread2 failed!"<<std::endl;
return -;
} ::Sleep();
handle3=::CreateThread(NULL,,killthread,NULL,,&dw3);
if(handle3==NULL)
{
std::cout<<"create thread3 failed !"<<std::endl;
return -;
} ::CloseHandle(mythread1);
::CloseHandle(mythread2);
::CloseHandle(killthread); return ;
}