基础知识
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提供的两个函数,用于获取和设置线程的亲和性掩码。这些函数可以用来查询和修改线程在处理器上运行的位置。
-
GetThreadAffinityMask函数:
- 函数原型:BOOL GetThreadAffinityMask(HANDLE hThread, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask)
- 作用:获取指定线程的亲和性掩码信息。
- 参数:
- hThread:线程句柄,指定要查询亲和性的线程。
- lpProcessAffinityMask:指向DWORD_PTR类型的变量的指针,用于接收进程的亲和性掩码。
- lpSystemAffinityMask:指向DWORD_PTR类型的变量的指针,用于接收系统的亲和性掩码。
- 返回值:如果函数成功执行,返回非零值;如果函数执行失败,返回零。
-
SetThreadAffinityMask函数:
- 函数原型:DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask)
- 作用:将指定线程绑定到指定的处理器核心。
- 参数:
- hThread:线程句柄,指定要设置亲和性的线程