BSTR bPost=::SysAllocString(_T("POST"));
BSTR Post=::SysAllocString(_T("https://login.plaync.co.kr/login/login"));
BSTR bContent_Type=::SysAllocString(_T("Content-Type"));
BSTR Content_Type=::SysAllocString(_T("application/x-www-form-urlencoded"));///////初始化
BSTR bsData=::SysAllocString(_T("save=on&id=")+zhanghao+_T("&pwd=")+mima")); HANDLE hEvent=::CreateEvent(NULL,FALSE,FALSE,NULL); //异步事件
CXMLSink xmlsink(hEvent); //异步类
pReq-> put_onreadystatechange((IDispatch*)&xmlsink); //异步调用 pReq->open(bPost,Post,VARIANT_TRUE);
pReq->setRequestHeader(bContent_Type,Content_Type);
pReq->send(_variant_t(bsData)); //发送 ::SysFreeString(bsData);
::SysFreeString(bPost);
::SysFreeString(Post);
::SysFreeString(bContent_Type);
::SysFreeString(Content_Type); WaitForSingleObject(hEvent,30000);
用同步的时候,网站抓包,完成值是4,状态返回200没问题。
改成异步的时候,抓包查看,状态一直都是0,数据是发出去了,可是不返回, 异步类也确实调用了。
好像是调用WaitForSingleObject函数的时候就阻塞住了,pReq不读取数据了似的。这个函数是用是用MFC的AfxBeginThread函数创建的线程,不能用while(GetMessage(..))缓冲,会异常的。不知道改怎么办了,大侠们来给指点指点该如何弄它。
BSTR Post=::SysAllocString(_T("https://login.plaync.co.kr/login/login"));
BSTR bContent_Type=::SysAllocString(_T("Content-Type"));
BSTR Content_Type=::SysAllocString(_T("application/x-www-form-urlencoded"));///////初始化
BSTR bsData=::SysAllocString(_T("save=on&id=")+zhanghao+_T("&pwd=")+mima")); HANDLE hEvent=::CreateEvent(NULL,FALSE,FALSE,NULL); //异步事件
CXMLSink xmlsink(hEvent); //异步类
pReq-> put_onreadystatechange((IDispatch*)&xmlsink); //异步调用 pReq->open(bPost,Post,VARIANT_TRUE);
pReq->setRequestHeader(bContent_Type,Content_Type);
pReq->send(_variant_t(bsData)); //发送 ::SysFreeString(bsData);
::SysFreeString(bPost);
::SysFreeString(Post);
::SysFreeString(bContent_Type);
::SysFreeString(Content_Type); WaitForSingleObject(hEvent,30000);
用同步的时候,网站抓包,完成值是4,状态返回200没问题。
改成异步的时候,抓包查看,状态一直都是0,数据是发出去了,可是不返回, 异步类也确实调用了。
好像是调用WaitForSingleObject函数的时候就阻塞住了,pReq不读取数据了似的。这个函数是用是用MFC的AfxBeginThread函数创建的线程,不能用while(GetMessage(..))缓冲,会异常的。不知道改怎么办了,大侠们来给指点指点该如何弄它。
解决方案 »
- namedpipez中readfile失败!大侠请帮帮小弟!
- VC对INI文件操作
- 我写的简单计算器,向静态子窗口发送字符串的时候出错(看不见),还有点击关闭按钮以后进程还在,请各位帮帮忙!
- 没分啦,但还是请好心人帮帮忙啊!DRAWITEM函数如何初始化
- Serialize
- 我想看MFC 中的代码,怎样看,例如:View 中的onprint(),onBeginPrinting();EndPrinting()等,请指教!
- 基于CRichEditView的调用字体对话框程序
- 在VC App中如何操作如Word之类的应用?
- 如何利用InternetConnect实现网址重定向
- 请问怎样才能将图像(.gif格式的)转化成二进制,然后再将二进制转化成图像呀?分数全给了,十分急
- 为什么不同线程访问局部存储TLS的对象,能得到不同的拷贝?
- 有窗体的ALT控件
异步类收到通知了,肯定执行了。
可是状态码始终都是0,抓包查看的时候,只要不调用WaitForSingleObject,状态码就能 返回200,调用等待函数,状态码一直都是0
{
public:
CXMLSink(DWORD dwRet,MSXML2::IXMLHTTPRequestPtr m_pEvent,HANDLE hEvent) : m_dwRef(1),m_pEventSource(m_pEvent),m_hEvent(hEvent)
{ } ~CXMLSink()
{
if(m_pEventSource)
m_pEventSource-> Release();
m_pEventSource=NULL;
} STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppv)
{
*ppv = NULL;
if (IID_IUnknown == riid)
{
*ppv = (LPUNKNOWN)this;
AddRef();
return NOERROR;
}
else if(IID_IDispatch == riid)
{
*ppv = (IDispatch*)this;
AddRef();
return NOERROR;
}
else
return E_NOTIMPL;
} STDMETHOD_(ULONG, AddRef)()
{
return ++m_dwRef;
} STDMETHOD_(ULONG, Release)()
{
if (--m_dwRef == 0)
{
delete this;
return 0;
}
return m_dwRef;
} STDMETHOD(GetTypeInfoCount)(UINT* pctinfo)
{
return E_NOTIMPL;
} STDMETHOD(GetTypeInfo)(UINT iTInfo,LCID lcid,ITypeInfo** ppTInfo)
{
return E_NOTIMPL;
} STDMETHOD(GetIDsOfNames)(REFIID riid,LPOLESTR* rgszNames,UINT cNames,LCID lcid,DISPID* rgDispId)
{
return E_NOTIMPL;
} STDMETHOD(Invoke)(DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS __RPC_FAR *pDispParams,
VARIANT __RPC_FAR *pVarResult,
EXCEPINFO __RPC_FAR *pExcepInfo,
UINT __RPC_FAR *puArgErr)
{
//MSXML2::IXMLHTTPRequestPtr xmlreq(m_pEventSource);
if(m_pEventSource)
{
long lReadyState;
m_pEventSource-> get_readyState(&lReadyState); MessageBox(NULL,L"111",NULL,MB_OK);
if(lReadyState==4)
{
//MessageBox(NULL,L"111",NULL,MB_OK);
::SetEvent(m_hEvent);
}
}
return NOERROR;
}
void SetEventSource(MSXML2::IXMLHTTPRequestPtr punk)
{
m_pEventSource=punk;
if(punk) punk-> AddRef();
} protected:
MSXML2::IXMLHTTPRequestPtr m_pEventSource;
DWORD m_dwRef;
HANDLE m_hEvent;
}; 以上是异步类实现。