近期工作中用到了Windows中的线程创建函数,实例代码如下:
#include <QCoreApplication>
#include <windows.h>
#include <iostream>
#include <windef.h>
using namespace std;
//声明了两个线程处理函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
//公有变量作为共享资源
int tickets=100;
//互斥锁句柄
HANDLE hMutex;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HANDLE hThread1;
HANDLE hThread2;
//创建互斥锁
hMutex=CreateMutex(NULL,FALSE,NULL);
//使用CreateThread函数创建线程hThread1和hThread2
hThread1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
while(true)
{
//主线程在互斥锁中出售火车票
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
cout<<"main thread sell ticket:"<<tickets--<<endl;
else
break;
ReleaseMutex(hMutex);
}
return 0;
//销售完火车票后关闭两个子线程
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(4000);
return a.exec();
}
//线程hThread1的线程处理函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(true)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
cout<<"thread1 sell ticket:"<<tickets--<<endl;
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
//线程hThread2的线程处理函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(true)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
cout<<"thread2 sell ticket:"<<tickets--<<endl;
else
break;
ReleaseMutex(hMutex);
}
return 0;
}