2013-08-22 57 views
-1

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

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

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

回答

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) 
+0

+1尽管“thread_func_thunk” :)富可以是抽象的,那么你就可以在你的产业链添加富,实现thread_func()你想怎么,虽然你应该把它称为'任务',或类似的)。 –

+0

我有一个疑问,这个线程假设贯穿创建它的对象的整个生命周期。在那段时间内,如果另一个对象访问thread_func_thunk函数,那么它是否会导致任何问题,或者两个创建的线程将安全地并行运行? – user2692032

+0

我发布的整个示例都是线程安全的。由你决定'thread_func'是否安全并且/或者用不同的实例调用它。 –

相关问题