主线程登录了,如何在其他线程中调用啊?高手帮帮忙!//1.我先在MyDlg.h中定义一个全局的对象
public:
        IWinHttpRequestPtr pHttpReq;
//2.然后在MyDlg.cpp中添加一个按钮函数进行登录
void CMyDlg::OnBnClickedLogin()
{......}
//3.登录成功以后,用下面这段代码获取信息CString strUrl="******";
//pHttpReq.CreateInstance(__uuidof(WinHttpRequest));
pHttpReq->Open(_T("GET"),strUrl.AllocSysString());
pHttpReq->Send();//问题来了,上面获取信息的代码放到主线程没有问题能获取到,
//但是如何把这段代码放到其他线程中啊?
//我下面这样操作,会出错:
//1.先在MyDlg.h中定义一个线程函数
public:
        static UINT OnGetData(LPVOID lpParam);
//2.然后在MyDlg.cpp中实现函数
UINT CMyDlg::OnGetData(LPVOID lpParam)
{
        CMyDlg* dlg=(CMyDlg*)lpParam;
        CoInitialize(NULL);
        CString strUrl="******";
//     dlg->pHttpReq.CreateInstance(__uuidof(WinHttpRequest));
        dlg->pHttpReq->Open(_T("GET"),strUrl.AllocSysString());
        dlg->pHttpReq->Send();
        CoUninitialize();
        return 0;
}
//3.调用的时候就出错
AfxBeginThread(OnGetData,this);

解决方案 »

  1.   

    先看CreateInstance有没有成功,然后就是对应的API是否支持多个线程调用
      

  2.   

    CWinThread* AfxBeginThread(
       AFX_THREADPROC pfnThreadProc,
       LPVOID pParam,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );
    pfnThreadProc
    Points to the controlling function for the worker thread. Cannot be NULL. This function must be declared as follows:
    UINT __cdecl MyControllingFunction( LPVOID pParam );
      

  3.   

    你可以在创建线程的时候将你的pHttpReq指针作为线程函数的参数传递给线程