代码片断如下:LPSTR strParam[1000];    //全局变量
int nCurIndex;           //全局变量BOOL CMyFtpDlg::OnInitDialog()
{
   。 
    nCurIndex=0;                  //初始化
ZeroMemory(strParam,1000);   //初始化
   。
}BOOL CMyFtpDlg::DownloadSingle(CFtpConnection *pFtp, CString strFileName, CString strLocFolder,CString strDTime)
{
  CString str;
  for(int i=0;i<50;i++)
  {
     ....
     strParam[nCurIndex]=strLocFile.GetBuffer(strLocFile.GetLength()); str.Format("%d ",nCurIndex);
MessageBox(str+strParam[nCurIndex]);   // It's OK.
::AfxBeginThread(InsertData,strParam[nCurIndex],THREAD_PRIORITY_NORMAL);
nCurIndex++;
     ....
  }
}UINT InsertData(LPVOID pFileName)
{
   LPSTR strFileName;
   strFileName=(LPSTR)pFileName;
   AfxMessageBox(strFileName);   //不是预期的值。为什么呢?
}为什么参数进入线程以后就变了?我用的是全局变量啊!

解决方案 »

  1.   

    在::AfxBeginThread(InsertData,strParam[nCurIndex],THREAD_PRIORITY_NORMAL);
    的实参strParam[nCurIndex]的传递时再加一个指针,试试
      

  2.   

    strLocFile 是不是局部变量?可能线程执行时已经 destruct 了。
    这样吧:LPSTR strParam[1000][MAX_PATH];    //全局变量...
    strcpy(strParam[nCurIndex], strLocFile);
    ::AfxBeginThread(InsertData,strParam[nCurIndex],THREAD_PRIORITY_NORMAL);
    nCurIndex++;
      

  3.   

    strLocFile.GetBuffer(strLocFile.GetLength())strLocFile 是全局变量吗?如果不是的话,出错是正常的。因为你试图通过全局变量取得主线程的局部变量。你可以使用CString strParam[1000];
      

  4.   

    to: In355Hz(好象一条狗)
    strLocFile 是局部变量.
      strcpy(strParam[nCurIndex], strLocFile);
    这句产生异常。