C++开发基础之CreateThread详细用法

基础知识

CreateThread

CreateThread是一个Windows API函数,用于创建一个新的线程。

函数原型如下:

HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  SIZE_T                  dwStackSize,
  LPTHREAD_START_ROUTINE  lpStartAddress,
  __drv_aliasesMem LPVOID lpParameter,
  DWORD                   dwCreationFlags,
  LPDWORD                 lpThreadId
);

参数说明:

  • lpThreadAttributes:一个指向 SECURITY_ATTRIBUTES 结构体的指针,指定了新的线程对象的安全特性。如果为NULL,则新的线程对象不能被继承。
  • dwStackSize:指定新线程的堆栈大小。如果为0,则使用默认堆栈大小。
  • lpStartAddress:一个指向线程函数的指针,表示新线程的入口点。
  • lpParameter:传递给线程函数的参数。
  • dwCreationFlags:指定了线程创建的标志位。可以为以下值之一或它们的组合:
    • 0:线程立即启动并运行。
    • CREATE_SUSPENDED:线程被创建挂起,不立即运行。
  • lpThreadId:一个指向 DWORD 变量的指针,接收新线程的 ID。

返回值:

如果函数调用成功,则返回一个指向新创建的线程对象的句柄;否则返回NULL。

使用CreateThread函数可以创建一个新的线程对象,并将其运行在独立的执行上下文中。在调用CreateThread函数后,新线程将开始运行指定的线程函数,并且可以访问该函数中的参数。

CreateSemaphore

CreateSemaphore是一个Windows API函数,用于创建一个新的命名或未命名的信号量对象。它可以被用于控制多个线程对共享资源的访问。

函数原型如下:

HANDLE CreateSemaphore(
  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  LONG                  lInitialCount,
  LONG                  lMaximumCount,
  LPCSTR                lpName
);

参数说明:

  • lpSemaphoreAttributes:一个指向 SECURITY_ATTRIBUTES 结构体的指针,指定了新的信号量对象的安全特性。如果为NULL,则新的信号量对象不能被继承。
  • lInitialCount:指定了信号量对象的初始计数器值。如果为0,则所有等待该信号量的线程都将进入等待状态。
  • lMaximumCount:指定了信号量对象的最大计数器值。它必须大于0。
  • lpName:指定了信号量对象的名称。如果为NULL,则创建未命名的信号量对象。

返回值:

如果函数调用成功,则返回一个指向新创建的信号量对象的句柄;否则返回NULL。

使用CreateSemaphore函数可以创建一个信号量对象,然后使用WaitForSingleObject或WaitForMultipleObjects函数等待信号量对象。当信号量对象计数器为0时,线程将进入等待状态,直到有另一个线程释放该信号量。使用ReleaseSemaphore函数可以增加信号量对象的计数器,并唤醒等待该信号量的线程。

GetThreadAffinityMask和SetThreadAffinityMask

GetThreadAffinityMask和SetThreadAffinityMask是Windows API提供的两个函数,用于获取和设置线程的亲和性掩码。这些函数可以用来查询和修改线程在处理器上运行的位置。

  1. GetThreadAffinityMask函数:

    • 函数原型:BOOL GetThreadAffinityMask(HANDLE hThread, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask)
    • 作用:获取指定线程的亲和性掩码信息。
    • 参数:
      • hThread:线程句柄,指定要查询亲和性的线程。
      • lpProcessAffinityMask:指向DWORD_PTR类型的变量的指针,用于接收进程的亲和性掩码。
      • lpSystemAffinityMask:指向DWORD_PTR类型的变量的指针,用于接收系统的亲和性掩码。
    • 返回值:如果函数成功执行,返回非零值;如果函数执行失败,返回零。
  2. SetThreadAffinityMask函数:

    • 函数原型:DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask)
    • 作用:将指定线程绑定到指定的处理器核心。
    • 参数:
      • hThread:线程句柄,指定要设置亲和性的线程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotnet研习社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值