MFC编码注意(2)

来源:互联网 发布:一垒二垒三垒 知乎 编辑:程序博客网 时间:2024/04/29 17:06
TNND!!
怎么今天又碰了个Dz,真是变态.
场景如下:
主线程中调用:
..............................
 m_saveThread = AfxBeginThread(ThreadSaveData,this);
子线程:
UINT CMainFrame::ThreadSaveData(LPVOID lParam)
{
CWinThread* saveThread = NULL;
 CMainFrame* mainFrame = reinterpret_cast<CMainFrame*>(lParam);
saveThread = mainFrame->GetSaveThread();
if(saveThread)
{
saveThread->SuspendThread();
}
.......................
}
 
结果我在调试的过程中经常出现saveThread时为空,时不为空.
让我感到特别不爽.
改为如此解决问题:
 m_saveThread = AfxBeginThread(ThreadSaveData,this,NULL, 0, CREATE_SUSPENDED);
子线程:
UINT CMainFrame::ThreadSaveData(LPVOID lParam)
{
CWinThread* saveThread = NULL;
 CMainFrame* mainFrame = reinterpret_cast<CMainFrame*>(lParam);
.......................
}

PS:
出现以上问题主要是在于主线程create 一个thread后有可能先执行子线程,也有可能先给 m_saveThread赋值,
大家以为然否?
不知还有没有更好的方案?
 
原创粉丝点击