-1
我正在.NET中创建可以在服务器端使用的应用程序。我的应用程序也有C++部分。在一个C++类中,我需要创建一个应该贯穿对象生命周期的线程。 我正在使用CreateThread函数来创建新的线程。创建线程的非静态函数
问题是,它需要一个静态函数作为运行线程的参数。因为我想在服务器端部署它,所以我不想使用静态函数来用于线程。我想使用该方法的对象的成员函数。
有没有更好的方式来创建线程
我正在.NET中创建可以在服务器端使用的应用程序。我的应用程序也有C++部分。在一个C++类中,我需要创建一个应该贯穿对象生命周期的线程。 我正在使用CreateThread函数来创建新的线程。创建线程的非静态函数
问题是,它需要一个静态函数作为运行线程的参数。因为我想在服务器端部署它,所以我不想使用静态函数来用于线程。我想使用该方法的对象的成员函数。
有没有更好的方式来创建线程
你不能一个成员函数指针传递给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)
+1尽管“thread_func_thunk” :)富可以是抽象的,那么你就可以在你的产业链添加富,实现thread_func()你想怎么,虽然你应该把它称为'任务',或类似的)。 –
我有一个疑问,这个线程假设贯穿创建它的对象的整个生命周期。在那段时间内,如果另一个对象访问thread_func_thunk函数,那么它是否会导致任何问题,或者两个创建的线程将安全地并行运行? – user2692032
我发布的整个示例都是线程安全的。由你决定'thread_func'是否安全并且/或者用不同的实例调用它。 –