C++ の beginthreadex 関数の使用方法

_beginthreadex は、C++ で使用されるスレッドを作成するための関数で、宣言は次のとおりです。

uintptr_t _beginthreadex(
   void* security,
   unsigned stack_size,
   unsigned ( __stdcall *start_address )( void* ),
   void* arglist,
   unsigned initflag,
   unsigned* thrdaddr
);

パラメータの説明を以下に示します。

  1. セキュリティー:スレッドセーフ属性を指すポインター。通常は NULL に設定されます。
  2. stack_size:スレッドスタックのサイズをバイト単位で指定します。 デフォルト値は0で、この場合、デフォルトサイズが使用されます。
  3. start_address: 新規スレッドで呼び出される関数のアドレスです。
  4. スレッド関数に渡す引数。
  5. initflag: スレッドの作成フラグで 0 または CREATE_SUSPENDED をとります。
  6. 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 を使用して、スレッドの終了まで待機し、終了したらスレッド ハンドルを閉じます。

bannerAds