一个类
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的函数还没返回就继续下一个循环了,这种情况又是什么原因?
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的函数还没返回就继续下一个循环了,这种情况又是什么原因?
在侯捷译的《win32 多线程程序设计》中就有,用Sleep()中的时间长点,或者调用等待线程结束函数。