C++ の beginthreadex 関数の使用方法
_beginthreadex は、C++ で使用されるスレッドを作成するための関数で、宣言は次のとおりです。
uintptr_t _beginthreadex(
void* security,
unsigned stack_size,
unsigned ( __stdcall *start_address )( void* ),
void* arglist,
unsigned initflag,
unsigned* thrdaddr
);
パラメータの説明を以下に示します。
- セキュリティー:スレッドセーフ属性を指すポインター。通常は NULL に設定されます。
- stack_size:スレッドスタックのサイズをバイト単位で指定します。 デフォルト値は0で、この場合、デフォルトサイズが使用されます。
- start_address: 新規スレッドで呼び出される関数のアドレスです。
- スレッド関数に渡す引数。
- initflag: スレッドの作成フラグで 0 または CREATE_SUSPENDED をとります。
- thrdaddr:受信スレッドIDへのポインタ(unsigned integer)
_beginthreadex関数は新しいスレッドを作成し、そのスレッドのハンドルを返します。このスレッドハンドルは、スレッドの操作や管理(スレッドの終了待ち、スレッドの終了など)に使用できます。スレッドハンドルの使用が終わったら、CloseHandle関数を呼び出してリソースを解放する必要があります。
簡単な使い方の例:
#include <iostream>
#include <windows.h>
#include <process.h>
unsigned __stdcall MyThread(void* arg)
{
int* num = (int*)arg;
std::cout << "This is thread " << *num << std::endl;
return 0;
}
int main()
{
HANDLE hThread;
unsigned threadID;
int threadArg = 1;
hThread = (HANDLE)_beginthreadex(NULL, 0, &MyThread, &threadArg, 0, &threadID);
if (hThread == NULL)
{
std::cout << "Failed to create thread" << std::endl;
return 1;
}
// 等待线程结束
WaitForSingleObject(hThread, INFINITE);
// 关闭线程句柄
CloseHandle(hThread);
return 0;
}
上の例では、_beginthreadex 関数は、スレッド関数の MyThread のアドレスと引数 threadArg を渡して、スレッドを作成します。その後、返されたスレッド ハンドル hThread を使用して、スレッドの終了まで待機し、終了したらスレッド ハンドルを閉じます。