非静态函数来创建线程

时间:2013-08-22 18:51:01

标签: .net multithreading visual-studio-2010 visual-c++

我在.NET中创建可以在服务器端使用的应用程序。我的应用程序也有C ++部分。在其中一个c ++类中,我需要创建一个应该在对象的生命周期内运行的线程。 我正在使用CreateThread函数来创建新线程。

问题是,它需要一个静态函数作为运行线程的参数。由于我想在服务器端部署它,我不想使用静态函数来用于线程。我想使用该方法的对象的成员函数。

有没有更好的方法来创建线程

1 个答案:

答案 0 :(得分: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)