_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
創建一個新線程,并將其掛起。接著,我們恢復線程的執行,并等待它完成(這一步是可選的)。