如题:根据得到的SQL语句,比如有10条, 循环执行。 CString sql;
 CStringArray arr; //SQL集合
///////////////////////////////////
//传递参数的结构体
typedef struct 
{
   CWnd *pWnd;
  CString sql;
 };
//////////////////////////////
  for(int i=0;i<arr.GetSize();i++)
{   str=arr.GetAt(i);
    TP tpa;
   tpa.pWnd=this;
   tpa.sql=sql;
   HANDLE hThread=CreateThread(NULL,0,RunSQLProc,&tpa,0,NULL);
 }
DWORD WINAPI RunSQLProc(LPVOID lpParameter)
{    TP  *lpTP=(TP*)lpParameter;
 pDlg=(CTestDlg*)(lpTP->pWnd);
CString sa=lpTP->sql;
AfxMessageBox(sa);
  //////////////////////////////
   。
   --执行得到的SQL语句
} 问题 :程序执行后得到的 弹出对话框命令全部是最后一条,请问为什么?
  如何修改? 谢谢

解决方案 »

  1.   

      有一句写错了 应该为:
    str=arr.GetAt(i); 
        TP tpa; 
      tpa.pWnd=this; 
      tpa.sql=str;//
      

  2.   

    打个断点跟踪下看每次传入的str值是否一样?
    然后在线程执行函数中跟踪看lpTP->sql 是否都是一样的
      

  3.   

    把AfxMessageBox(sa); 改为
    使用TRACE宏跟踪
      

  4.   

    HANDLE hThread=CreateThread(NULL,0,RunSQLProc,&tpa,0,NULL);创建完后, 用sleep(适当的延时试下), 这样继续创建的线程可能才有机会运行