C++多线程——CreateThread

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;
}
上述创建线程成功,但是还存在一些问题,即线程同步,关于线程同步,后续会继续介绍。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值