_beginthreadex
是C++标准库中的一个函数,用于创建一个新的线程。这个函数的原型如下:
unsigned long WINAPI _beginthreadex(
void *arg,
unsigned int stackSize,
void (WINAPI *threadfunc)(void *),
void *arg2,
unsigned int creationFlags,
unsigned long *threadId
);
参数解释:
arg
:传递给线程函数的参数。stackSize
:线程的堆栈大小,以字节为单位。如果为0,则使用默认堆栈大小。threadfunc
:线程函数,该函数应该返回一个DWORD
值,并接受一个void*
参数。arg2
:传递给线程函数的另一个参数。creationFlags
:创建标志,用于控制线程的创建方式。例如,CREATE_SUSPENDED
表示创建一个挂起的线程,CREATE_NO_WINDOW
表示创建的线程不拥有窗口句柄。threadId
:指向一个新线程的ID的指针。如果此参数为NULL
,则不返回线程ID。下面是一个简单的示例,展示如何使用_beginthreadex
创建一个新线程:
#include <iostream>
#include <windows.h>
DWORD WINAPI ThreadFunction(void* arg) {
std::cout << "Hello from the new thread!" << std::endl;
return 0;
}
int main() {
unsigned long threadId;
if (_beginthreadex(NULL, 0, ThreadFunction, NULL, CREATE_SUSPENDED, &threadId) == 0) {
std::cout << "Failed to create thread." << std::endl;
return 1;
}
std::cout << "Thread created with ID: " << threadId << std::endl;
// Resume the thread
ResumeThread(GetCurrentThread(), 0);
// Wait for the thread to finish (optional)
WaitForSingleObject(GetCurrentThread(), INFINITE);
return 0;
}
在这个示例中,我们定义了一个名为ThreadFunction
的线程函数,它只是简单地输出一条消息。然后,在main
函数中,我们使用_beginthreadex
创建一个新线程,并将其挂起。接着,我们恢复线程的执行,并等待它完成(这一步是可选的)。