-1

サーバー側で使用できる.NETでアプリケーションを作成しています。私のアプリケーションには C++ の部分もあります。C++ クラスの 1 つで、オブジェクトの存続期間を通じて実行されるスレッドを作成する必要があります。CreateThread 関数を使用して新しいスレッドを作成しています。

問題は、スレッドを実行するためのパラメータとして静的関数が必要なことです。サーバー側にデプロイしたいので、スレッドに使用する静的関数を使用したくありません。このメソッドで使用するオブジェクトのメンバー関数を使用したい。

スレッドを作成するより良い方法はありますか

4

1 に答える 1

2

にメンバー関数ポインターを渡すことはできませんが、メンバーCreateThread関数に転送する非メンバー関数を渡すことはできます。

関数に渡される引数を渡すことができCreateThreadます。これを使用して、クラスのインスタンスを渡します。

struct foo
{
    void thread_func();

    static DWORD CALLBACK thread_func_thunk(void *arg)
    {
        ((foo*)arg)->thread_func();
    }
};

foo fooinst;
CreateThread(nullptr, 0, foo::thread_func_thunk, (void*)&fooinst, 0, nullptr)
于 2013-08-22T18:59:26.913 に答える