关于虚函数重载遇到的怪问题 -- 为什么经常调用了基类的函数
本来想基类实现一个线程,维护一些基本的东西,然后由子类重载线程工作函数,如下:
CALLBACK threadfunc(LPVOID dwUser)
{
((cbase *)dwUser)->work();
}
cbase::cbase
{
createthread(.., ... ,threadfunc, this,..)
}
virtual cbase::work()
{
while(1)
{
dispatch();
}
}
然后写子类,继承这个基类,同时在子类中实现自己的work()函数,结果运行的时候怎么发现经常运行的是基类的work().
纳闷了好一阵子。。。。。。。
才明白一个问题:基类在生成线程的时候,子类的构造体还没运行,这时候线程的Callback函数根据指针来判断该调用哪一个work()--- 子类还是基类, 这就有问题了。。。
这玩意,可能玩惯了C++人都没有注意,给自己一个提醒!! ---- 电脑都是顺序执行的。。。