类中静态线程函数调用本类的其他静态成员函数和调用其他类的成员函数的奇怪问题,请指点解释。
一个类
Class A
{
public:
void StartThread();
static UINT ThreadFun(LPVOID lParam);
static void Fun();
};
void A::StartThread()
{
AfxBeginThread((AFX_THREADPROC)A::ThreadFun,(LPVOID)NULL);
}
UINT A::ThreadFun(LPVOID lParam)
{
for(;;)
{
Sleep(0);
//此处调用Fun()函数,该函数处理时间比较长
Fun();
//其他处理
}
}
调试运行的时候,发现在进入Fun计算过程中,for循环还没等Fun返回,就进行下一次循环了,造成的结果是Fun在同时间执行了两次。
问题是:线程循环中为什么会出现函数没返回就执行下一个循环了?
另外一个情况是:
类
Class B
{
//..
};
线程调用该类的其他函数执行一些计算
UINT A::ThreadFun(LPVOID lParam)
{
B b;
for(;;)
{
Sleep(0);
//此处调用class B的成员函数,该函数处理时间比较长
b.somefun();
//其他处理
}
}
线程执行以后,同样出现还类b的函数还没返回就继续下一个循环了,这种情况又是什么原因?