Windows多线程相关API

如果想精通WIN下的多线程编程,需要很好的线程原理的基础,但是如果只想初步应用WIN下的多线程的API,这篇文章还是有用的,我目前的情况,也仅是初步使用,而且够用

注意本文没有对 事件 对象进行说明,因为本人暂时没有用到

BOOL WINAPI CloseHandle(
  _In_ HANDLE hObject
);

用于关闭(释放)windows句柄:
    hObject: 必需是有效的windows句柄
DWORD WINAPI WaitForSingleObject(
  _In_ HANDLE hHandle,
  _In_ DWORD  dwMilliseconds
);

用于等待某个句柄的信号,我一般这样设置参数:
    hHandle: 必需是有效的windows句柄
    dwMilliseconds: 超时参数(INFINITE 超时时间为无限大)
DWORD WINAPI 函数名字(LPVOID lpParameter);
static DWORD WINAPI 函数名字(LPVOID lpParameter);

线程入口函数的形式,其中第一种形式必需是全局的,第二种形式可用于类中

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
);

用于创建一个线程,我一般会设置两个参数:
    lpStartAddress: 线程入口函数地址
    lpParameter: 线程入口函数的参数
其它参数使用默认值:
    lpThreadAttributes: NULL
    dwStackSize: 0
    dwCreationFlags: 0
    lpThreadId: NULL

必需使用 CloseHandle 关闭句柄
如果线程主函数退出会触发一个信号,WaitForSingleObject会返回
HANDLE WINAPI CreateMutex(
  _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,
  _In_     BOOL                  bInitialOwner,
  _In_opt_ LPCTSTR               lpName
);

用于创建互斥锁,一般使用默认值:
    lpMutexAttributes: NULL
    bInitialOwner: false
    lpName: NULL

必需使用 CloseHandle 关闭句柄


BOOL WINAPI ReleaseMutex(
  _In_ HANDLE hMutex
);

用于释放锁, 参数设置如下:
    hMutex: 必需是有效的windows句柄

CreateMutex和ReleaseMutex都会触发一个信号,WaitForSingleObject会返回
HANDLE WINAPI CreateSemaphore(
  _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  _In_     LONG                  lInitialCount,
  _In_     LONG                  lMaximumCount,
  _In_opt_ LPCTSTR               lpName
);

用于创建信号量,我一般会设置两个参数:
    lInitialCount: 信号量的初使值
    lMaximumCount: 信号量的最大值
其它参数使用默认值:
    lpSemaphoreAttributes: NULL
    lpName: NULL

必需使用 CloseHandle 关闭句柄

BOOL WINAPI ReleaseSemaphore(
  _In_      HANDLE hSemaphore,
  _In_      LONG   lReleaseCount,
  _Out_opt_ LPLONG lpPreviousCount
);

用于释放信号量,参数一般设置如下:
    hSemaphore: 必需是有效的windows句柄
    lReleaseCount: 释放的个数(一般设置为1)
其它参数采用默认值:
    lpPreviousCount: NULL

CreateSemaphore和ReleaseSemaphore都会触发一个信号,WaitForSingleObject会返回
CRITICAL_SECTION: 临界区对象

void WINAPI InitializeCriticalSection(
  _Out_ LPCRITICAL_SECTION lpCriticalSection
);

用于初使化临界区对象,参数设置如下:
    lpCriticalSection: 临界区对象指针

void WINAPI DeleteCriticalSection(
  _Inout_ LPCRITICAL_SECTION lpCriticalSection
);

用于释放临界区对象,参数设置如下:
    lpCriticalSection: 临界区对象指针

void WINAPI EnterCriticalSection(
  _Inout_ LPCRITICAL_SECTION lpCriticalSection
);

用于进入临界区,参数设置如下:
    lpCriticalSection: 临界区对象指针

BOOL WINAPI TryEnterCriticalSection(
  _Inout_ LPCRITICAL_SECTION lpCriticalSection
);

尝试进入临界区,如果成功返回TRUE,如果失败返回FALSE,参数设置如下:
    lpCriticalSection: 临界区对象指针

void WINAPI LeaveCriticalSection(
  _Inout_ LPCRITICAL_SECTION lpCriticalSection
);

用于离开临界区,参数设置如下:
    lpCriticalSection: 临界区对象指针
CONDITION_VARIABLE: 条件变量对象

条件变量对象不需要Delete

VOID WINAPI InitializeConditionVariable(
  _Out_ PCONDITION_VARIABLE ConditionVariable
);

用于初使化条件变量对象,参数设置如下:
    ConditionVariable: 条件变量对象指针

BOOL WINAPI SleepConditionVariableCS(
  _Inout_ PCONDITION_VARIABLE ConditionVariable,
  _Inout_ PCRITICAL_SECTION   CriticalSection,
  _In_    DWORD               dwMilliseconds
);

用于Sleep一个条件变量对象,参数设置如下:
    ConditionVariable: 条件变量对象的地址
    CriticalSection: 临界区对象的地址
    dwMilliseconds: 超时参数(INFINITE 超时时间为无限大)

VOID WINAPI WakeConditionVariable(
  _Inout_ PCONDITION_VARIABLE ConditionVariable
);

用于Wake一个线程的条件变量对象,参数设置如下:
    ConditionVariable: 条件变量对象的地址

VOID WINAPI WakeAllConditionVariable(
  _Inout_ PCONDITION_VARIABLE ConditionVariable
);

用于Wake所有线程的条件变量对象,参数设置如下:
    ConditionVariable: 条件变量对象的地址

BOOL WINAPI SleepConditionVariableSRW(
  _Inout_ PCONDITION_VARIABLE ConditionVariable,
  _Inout_ PSRWLOCK            SRWLock,
  _In_    DWORD               dwMilliseconds,
  _In_    ULONG               Flags
);

用于和读写锁一起使用,暂时不作要求
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值