pThread = AfxBeginThread(AutoAssembly,NULL);//¿ª±ÙÒ»¸öÏ߳̽øÐÐ×Ô¶¯×°ÅäUINT AutoAssembly(LPVOID pParam)
{
   CString fn;
   CString aLine;
   CString Comstr;
   fn = "Alog\\Alog.txt";
   CStdioFile myFile;
   if(!myFile.Open(fn,CFile::shareDenyWrite))
return 0;
    CMainFrame* pMain = (CMainFrame *)AfxGetApp()->m_pMainWnd;
    CDrasStereoView *view=(CDrasStereoView*)pMain->GetActiveView();

   while(myFile.ReadString(aLine))
   {
   //¼ì²âÊÇ·ñ½øÐÐ×Ô¶¯×°Åä
   if(!(view->ControlData.IsAutoAssembling))
   return 0;
if(!(aLine.IsEmpty()))
{

//    view->MPEGRenderer->recordFrame(2);//¼ÖÆ
   int i = aLine.FindOneOf(_T(" "));
   Comstr = aLine.Left(i);
   aLine = aLine.Mid(i);
   aLine.TrimLeft(_T(" "));
   strcpy(view->MessageData.sValue , aLine);
   //×°ÔØ
   if(Comstr.Compare("LoadP")==0)
   {
  view->OnRMFileOpen(aLine);
//   app->m_ptcollision->activate(FALSE);
  fSumR = 0.0;
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 1;
   }
   //³õʼ»¯Î»ÖÃ
   else if(Comstr.Compare("InitP")==0)
   {
  view->Initp(aLine);    
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 2;
   }
   //³õʼ»¯½Ç¶È
   else if(Comstr.Compare("InitR")==0)
   {
  view->InitR(aLine);    
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 3;
   }
   //Ðгµ´ó³µÔËÐÐ
   else if(Comstr.Compare("HcScale")==0)
   {
  view->HcRun(aLine);
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 4;
   }
   //ÐгµÐ¡³µÔËÐÐ
   else if(Comstr.Compare("XcScale")==0)
   {
  view->XcRun(aLine);
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 5;
   }
   //ÐгµÐ¡³µ´¹Ö±ÔËÐÐ
   else if(Comstr.Compare("DgmScale")==0)
   {
  view->DgmRun(aLine);    
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 6;
   }
   //À­ÉþÐýת
   else if(Comstr.Compare("DgcScale")==0)
   {
  view->DgcRun(aLine);    
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 7;
   }
   //ÊÇ·ñ°î¶¨²¿¼þ
   else if(Comstr.Compare("BindP")==0)
   {
  view->IsBindP(aLine);    
  //·¢Ë͹²ÏíÊý¾Ý
  view->MessageData.AutoID = 8;
   }
   else
   {
      view->MessageData.AutoID = 0;
   }
   view->MessageData.ChangeID = 12;
           view->SendSharedData();
   view->MessageData.IsAutoAssembling = false; //
   ::Sleep(20); }
  }
   
myFile.Close();   return 0L;
}

解决方案 »

  1.   

    http://dev.csdn.net/develop/article/23/23171.shtm
    同样的,由于这些对象是被线程所拥有的,MFC的这些句柄映射的存储方式是线程局部存储(thread-local-storage ,TLS)。也就是说,对于同一个句柄,句柄映射中相应的对象可以不一致。这在多线程程序中会造成一些问题,参见微软知识库文章Q147578 CWnd Derived MFC Objects and Multi-threaded Applications。
      

  2.   

    简单说就是不要访问其他线程创建的MFC对象