this指针void *再转回this这样使用安全吗?这个过程编译器做了什么?
我在封装WIN32多线程函数时候遇到的问题。
//ThreadBase是一个抽象接口类namespace BASE{ class Thread :public ThreadBase { public: void create(); //创建线程函数 void run(); private: static UINT WINAPI threadFunc(PVOID handle); //创建线程时的回调函数 private: };} #include "Thread.h" void BASE::Thread::create() { UINT tID = 0; //创建线程时返回的ID _beginthreadex(NULL, 0, threadFunc,PVOID(this), 0 ,&tID); //现在在这里把this指针传递过去了 printf("%d\n",tID); Sleep(3); } void BASE::Thread::run() { printf("ok"); } UINT WINAPI BASE::Thread::threadFunc(PVOID handle) { Thread *p = static_cast<Thread*>(handle); //在这里转回来了 if(p) p->run(); return 0; }