这种方式退出线程有bug吗?
全局变量
static bool bflag=true;
子线程
{
while(bflag)
{
do...something
}
}
主线程:
void CXXDlg::OnExit()
{
bflag=flase;
Sleep(50);
}
深知 可以用event来退出子线程的! 但是我就不相信,为什么用全局bool标识的法子 阿里退出就有漏洞?
[解决办法]
可能 do...something的时间有些长。
[解决办法]
不能确保子线程的执行时间,你可以试着让子线程什么都不做,空着;试一下就会知道是可以的!
[解决办法]
do something 如果需要100ms
你只Sleep(50);
程序退出而线程没有安全退出呗!
用全局也行但你要知道你do something的上限时间,才能保证安全退出。
[解决办法]
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
dwMilliseconds
The time-out interval, in milliseconds. The function returns if the interval elapses, even if the object's state is nonsignaled. If dwMilliseconds is zero, the function tests the object's state and returns immediately. If dwMilliseconds is INFINITE, the function's time-out interval never elapses.