初学MFC,还不是很了解。
我现在由一个m_webBrowser用来加载URL,如下
if (m_Url.GetLength() == 0)
return;
m_webBrowser.Navigate(m_Url, NULL, NULL, NULL, NULL);
另外有个函数会读取到加载到的网页的HTML文件,代码如下
MSHTML::IHTMLDocument2Ptr pHTMLDoc = m_webBrowser.GetDocument();
问题在与由于加载网页时间太长,读到的HTML代码总是不全,所以想用WaitForSingleObject方法来等待m_webBrowser加载完毕在读取HTML。但WaitForSingleObject的第一个参数句柄应该怎么写,我现在只知道m_webBrowser.GetReadyState() != READYSTATE_COMPLETE这个判断可以知道页面是否加载完全,怎么把这个变成句柄。
我在代码里面也定义不了CEvent类,不知道怎么办
用sleep好象不行,是不是因为
m_webBrowser在这个期间也不会加载URL的
还是读不到HTML文件
我试了sleep 10秒钟了,读出来的HTML还是为空。10秒肯定可以加载了的。
MFC下WaitForSingleObject用法
答案:2 悬赏:10 手机版
解决时间 2021-02-13 03:26
- 提问者网友:趣果有间
- 2021-02-12 22:02
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-02-12 23:30
有必要把问题搞那么复杂吗?
用个while(1)循环不就解决了?
int i=0;
while(1)
{
if(m_webBrowser.GetReadyState() != READYSTATE_COMPLETE)
{
Sleep(1000);//等待1秒
i++;
}
else
break;
if(i>=10)//time out
break;
}
你非要用这个函数的话,下面的代码供你参考,具体怎样实现你的思路恐怕不是这一两句代码能实现的。可能要涉及多线程。
HANDLE hMutex = CreateMutex(NULL,TRUE,NULL);//创建并拥有互斥对象
if(m_webBrowser.GetReadyState() == READYSTATE_COMPLETE)
ReleaseMutex(hMutex);//加载完成后释放互斥对象
WaitingForSingleObject(hMutex,10000);//等待互斥对象
用个while(1)循环不就解决了?
int i=0;
while(1)
{
if(m_webBrowser.GetReadyState() != READYSTATE_COMPLETE)
{
Sleep(1000);//等待1秒
i++;
}
else
break;
if(i>=10)//time out
break;
}
你非要用这个函数的话,下面的代码供你参考,具体怎样实现你的思路恐怕不是这一两句代码能实现的。可能要涉及多线程。
HANDLE hMutex = CreateMutex(NULL,TRUE,NULL);//创建并拥有互斥对象
if(m_webBrowser.GetReadyState() == READYSTATE_COMPLETE)
ReleaseMutex(hMutex);//加载完成后释放互斥对象
WaitingForSingleObject(hMutex,10000);//等待互斥对象
全部回答
- 1楼网友:舍身薄凉客
- 2021-02-13 00:07
dword waitforsingleobject( handle hhandle, dword dwmilliseconds);
参数:
hhandle[in]对象句柄。可以指定一系列的对象,如event、job、memory resource notification、mutex、process、semaphore、thread、waitable timer等。
dwmilliseconds[in]定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hhandle标记的对象被触发,或者时间到了。如果dwmilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwmilliseconds 为 infinite,对象被触发信号后,函数才会返回。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯