TNND!!
怎么今天又碰了个Dz,真是变态.
场景如下:
主线程中调用:
..............................
m_saveThread = AfxBeginThread(ThreadSaveData,this);
子线程:
UINT CMainFrame::ThreadSaveData(LPVOID lParam)
{
{
CWinThread* saveThread = NULL;
CMainFrame* mainFrame = reinterpret_cast<CMainFrame*>(lParam);
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);
CMainFrame* mainFrame = reinterpret_cast<CMainFrame*>(lParam);
.......................
}
PS:
出现以上问题主要是在于主线程create 一个thread后有可能先执行子线程,也有可能先给 m_saveThread赋值,
大家以为然否?
不知还有没有更好的方案?