基本上我有一个类,它是可以解决的(不是静态的)。基本上我希望类能够生成自己的线程并管理自己的东西。我不想为我制作的每个实例进行全局回调,这对我来说似乎并不干净。做我想做的事的正确方法是什么。如果我尝试将threadproc传递给CreateThread并且它是来自类实例的proc,编译器说我不能这样做。实现我想要的最好方法是什么?感谢
答案 0 :(得分:0)
您要做的是创建一个静态成员方法,该方法又调用threadproc成员。它需要一个指向类实例的指针来进行调用,因此你需要将'this'作为(void *)参数传递给CreateThread。
答案 1 :(得分:0)
class Obj
{
static ULONG WINAPI ThreadProc(void* p)
{
Obj* pThis = (Obj*)p;
... do stuff ...
return 0;
}
void StartMemberThread()
{
CreateThread(... ThreadProc, this, ... );
}
};
最棘手的部分是确保线程在对象消失后不使用pThis。
答案 2 :(得分:0)
为什么在使用简单的跨平台解决方案(例如boost::thread库)时可以使用WIN32线程?这完全消除了你的问题。但是,如果您使用的是WIN32(或pthreads),则可以指定应传递给线程例程的void *参数。因此,void *对象可以是指向类的指针;简单地将它转换回线程例程中的正确类型。将void *转换回类型指针后,可以调用该对象的成员函数。
P.S。这个词是“可实现的”。