c++ win32线程操作

//创建线程
//返回值:线程句柄
HANDLE WINAPI CreateThread(
	_In_opt_  LPSECURITY_ATTRIBUTES  lpThreadAttributes,
	_In_      SIZE_T                 dwStackSize,
	_In_      LPTHREAD_START_ROUTINE lpStartAddress,
	_In_opt_  LPVOID                 lpParameter,
	_In_      DWORD                  dwCreationFlags,
	_Out_opt_ LPDWORD                lpThreadId
);

//挂起线程:
DWORD WINAPI SuspendThread(
	_In_ HANDLE hThread // 线程句柄
);

//恢复线程执行
DWORD WINAPI ResumeThread(
	_In_ HANDLE hThread // 线程句柄
);


//内核对象: 如线程,当线程处于运行时,是未通知状态,当线程处于停止状态时,是已通知状态
//满足两个参数任何一个都可以继续往下执行 timeOut:-1 永远等待
//等待线程执行完成 返回值 : WAIT_OBJECT_0(0) :线程已通知 WAIT_TIMEOUT(0x102) :线程超时
DWORD WINAPI WaitForSingleObject(
	_In_ HANDLE hHandle,
	_In_ DWORD  dwMilliseconds
);


DWORD WINAPI WaitForMulipleObjects(_In_  DWORD  nCount,//对象个数
	_In_ const HANDLE *lpHandles,//存放多个内核对象的句柄的数组  的指针;
	_In_       BOOL   bWaitAll,//TRUE 为等待全部对象为已通知,FLASE 为只要有一个变为已通知 
	_In_       DWORD  dwMilliseconds//等待时间
);
//退出线程
DWORD WINAPI	 ExitThread(DWORD exitCode); //线程内部使用
											 //return a //正常返回 a为退出码
DWORD WINAPI	 TerminateThread(_In_ HANDLE hThread, _In_ DWORD exitCode);//线程外部使用,直接终止线程,并保留线程堆栈不销毁
																		   //获取线程退出码
BOOL GetExitCodeThread(_In_ HANDLE hThread, _Out_ DWORD exitCode)//配合WaitForSingleObject 使用/
																 // 获取挂起线程内部信息
	DWORD WINAPI	 SuspendThread(_In_ HANDLE hhandle);

CONTEXT context;//设置要获取的类型
context.ContextFlage = CONTEXT_CONTROL;//有多种
									   //获取
BOOL GetThreadContext(_In_ HANDLE hThread, _In_ CONTEXT* context);
//设置
CONTEXTSetThreadContext(_In_ HANDLE hThread, _In_ CONTEXT* context);
//临界区 
//创建
CRITICAL_SECTION cs;
//初始化
VOID WINAPI  InitializeCriticalSection(&cs);
//在线程中使用
//获取
VOID WINAPI  EnterCriticalScetion(&cs);
//释放
VOID WINAPI LeaveCriticalSection(&cs);
//删除
VOID WINAPI DeleteCriticalSection(cs);
//使用时可以为每一个全局变量单独创建一个锁,避免多个线程使用不同的有交叉的多个全局变量时造成死锁
DWORD a; DWORD b; DWORD c;
CRITICAL_SECTION ka; CRITICAL_SECTION kb; CRITICAL_SECTION kc;
//互斥体:可以跨进程进行线程控制 互斥体是内核对象
//创建 在同一个进程内使用可以不提供Nmae
HANDLE gMutex = CreateMutex(nullptr, FALSE, "name");
//使用
HANDLE gMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "name");
WaitForSingleObject(HANDLE g_Mutex, DWORD timeOut);//在互斥体没有被释放之前,只能等待,不能接着往下
												   //释放
ReleaseMutex(HANDLE dMutex);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值