高手请问有这么一个问题,我准备封装一个线程类,是这样设计的
高手请问有这么一个问题,我准备封装一个线程类,是这样设计的
class CThread
{
public:
static DWORD WINAPI ThreadProc(LPVOID pV)
{
CThread *pThread=(CThread *)pV;
pThread->ClassProc();
return 0;
}
virtual void ClassProc()
{
//TRACE("this is a test");
//在这里实现的功能实现
}
void StartThread()
{
m_hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,&m_dwThreadID);
ASSERT(m_hThread != NULL);
}
private:
HANDLE m_hThread;
DWORD m_dwThreadId;
};
class CThreadChild :public CThread
{
public:
virtual void ClassProc()
{
//TRACE("this is a test");
//在这里实现的功能实现
}
};
//虚拟使用,只是拿来演示实际并不是这样用
void main()
{
CThreadChild Thread;
//create a thread
Thread.StartThread();
}
问题出在类型转换的时候
将
CThreadChild 的对象转换成
CThreadChild *pChild=new CThreadChild;
.....
CreateThread中做得
pV=pChild;
.....
CThread pThread= (CThread *)pV;
//想用多态调用CThreadChild 的ClassProc()但失败了
pThread.ClassProc();