2020年10月12日

[C++Builder] _beginthreadex にクラス内関数を指定する

重要そうなところは太文字にしてみた。

クラス宣言
class Caaaa
{
private:
    HANDLE   threadHandle;

public:
    unsigned int __stdcall Execute();   // スレッド実体
    static unsigned int __stdcall executeLauncher(void* args);  // スレッドのランチャー
};

スレッドのランチャー
unsigned int __stdcall Caaaa::executeLauncher(void* args)
{
    reinterpret_cast<Caaaa*>(args)->Execute();
    return 0;
}

実際に行いたいスレッド実体
unsigned int __stdcall Caaaa::Execute()
{
    // ここにスレッドの処理をごにょごにょと。

    _endthreadex( 0 );
    return 0;
}

スレッド起動したいところで
    threadHandle= (HANDLE)_beginthreadex(NULL, 0, &Caaaa::executeLauncher, this, 0, NULL);


という感じで動いた(XE2で)


posted by すら at 19:51| プログラミングなこと