将对象指针传递给线程参数
 FlashToolThread(LPVOID pParam)
{
      A *p = (A *)pParam;
      p->fun();
}

解决方案 »

  1.   

    将对象指针传递给线程参数
     FlashToolThread(LPVOID pParam)
    {
          A *p = (A *)pParam;
          p->fun();
    }
      

  2.   


    UINT _ListenTcpThread(LPVOID lparam)
    {//TCP监听线程
    CBackupClientDlg *pDlg=(CBackupClientDlg *)lparam;//看这里,创建对话框对象
    if(pDlg->StopServer==true) return -1;

    CSocket sockSrvr;
    pDlg->m_Potr=PORT+pDlg->m_server;
    int createSucceed=sockSrvr.Create(pDlg->m_Potr);
    if(createSucceed==0)
    {
    AfxMessageBox("_ListenTcpThread Create错误!"+pDlg->GetError(GetLastError()));
    return -1;
    }

    int listenSucceed=sockSrvr.Listen();//本机指定端口监听网络事件
    if(listenSucceed==0)
    {
    AfxMessageBox("_ListenTcpThread Listen错误!"+pDlg->GetError(GetLastError()));
    return -1;
    }

    CSocket recSo;
    SOCKADDR_IN client;
    int iAddrSize=sizeof(client);
    //监听到网络事件交给接收线程处理,监听线程继续监听消息
    int acceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR *)&client,&iAddrSize);
    if(acceptSucceed==0)
    {
    AfxMessageBox("_ListenTcpThread Accept错误!"+pDlg->GetError(GetLastError()));
    return -1;
    }
    sockSrvr.Close();
    char flag[FLAG]={0};
    if(recSo.Receive(flag,FLAG)!=2) 
    {
    return -1;
    }
    pDlg->m_type=flag[0];
    if(pDlg->m_type=='D') return 0;

    pThreadLisen=::AfxBeginThread(_ListenTcpThread,pDlg);
    pDlg->ReceiveFileMsg(recSo,client);//接收线程
    return 0;

    }
      

  3.   

    class A对象实例的指针通过线程参数传递进来,也可以使用全局变量,不过在多线程时要慎用全局变量