//h
void NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL);
DECLARE_EVENTSINK_MAP()
//cpp
...
BOOL Cvxbot1Dlg::OnInitDialog()
{
...
LoadComplete = 0;
URList.push_back(L"http:/...
URList.push_back(L"http:/...
...
Iter1 = URList.begin();
m_ctrlWeb.Navigate(Iter1.c_str(), NULL, NULL, NULL, NULL);
...
}
void Cvxbot1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == IDT_TIMER1)
{
KillTimer(theTIMER);
if(ListIter1 == URList.end())
{
ListIter1 = URList.begin();
}
m_ctrlWeb.Navigate(ListIter1->c_str(), NULL, NULL, NULL, NULL);
}
}
void Cvxbot1Dlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
ListIter1++;
theTIMER = SetTimer(IDT_TIMER1, 3000, 0);
}
загрузка списка сайтов поочереди с паузой. MFC
Код:
не пашет (перескакивает на несколько)
Код:
...
BOOL Cvxbot1Dlg::OnInitDialog()
{
...
URList.push_back(L"http://...");
ListIter1 = URList.begin();
event1 = CreateEventW(NULL,TRUE,FALSE,L"vx_event_234");
if(_beginthread(TrFoo,1024,NULL)!=-1)
{
SetEvent(event1);
}
return TRUE;
}
void Cvxbot1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == IDT_TIMER1)
{
KillTimer(theTIMER);
if(ListIter1 == URList.end())
{
ListIter1 = URList.begin();
}
SetEvent(event1);
}
}
void Cvxbot1Dlg::OnDestroy()
{
CloseHandle(event1);
}
BEGIN_EVENTSINK_MAP(Cvxbot1Dlg, CDialog)
ON_EVENT(Cvxbot1Dlg, IDC_EXPLORER1, 252, Cvxbot1Dlg::NavigateComplete2Explorer1, VTS_DISPATCH
VTS_PVARIANT)
END_EVENTSINK_MAP()
void Cvxbot1Dlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
ListIter1++;
theTIMER = SetTimer(IDT_TIMER1, 5000, 0);
}
void TrFoo(void *pv)
{
DWORD dwWaitResult = 1;
while(true)
{
while(dwWaitResult!=WAIT_OBJECT_0)
{
dwWaitResult = WaitForSingleObject(event1,1);
}
ResetEvent(event1);
m_ctrlWeb.Navigate(ListIter1->c_str(), NULL, NULL, NULL, NULL);
}
}
BOOL Cvxbot1Dlg::OnInitDialog()
{
...
URList.push_back(L"http://...");
ListIter1 = URList.begin();
event1 = CreateEventW(NULL,TRUE,FALSE,L"vx_event_234");
if(_beginthread(TrFoo,1024,NULL)!=-1)
{
SetEvent(event1);
}
return TRUE;
}
void Cvxbot1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == IDT_TIMER1)
{
KillTimer(theTIMER);
if(ListIter1 == URList.end())
{
ListIter1 = URList.begin();
}
SetEvent(event1);
}
}
void Cvxbot1Dlg::OnDestroy()
{
CloseHandle(event1);
}
BEGIN_EVENTSINK_MAP(Cvxbot1Dlg, CDialog)
ON_EVENT(Cvxbot1Dlg, IDC_EXPLORER1, 252, Cvxbot1Dlg::NavigateComplete2Explorer1, VTS_DISPATCH
VTS_PVARIANT)
END_EVENTSINK_MAP()
void Cvxbot1Dlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
ListIter1++;
theTIMER = SetTimer(IDT_TIMER1, 5000, 0);
}
void TrFoo(void *pv)
{
DWORD dwWaitResult = 1;
while(true)
{
while(dwWaitResult!=WAIT_OBJECT_0)
{
dwWaitResult = WaitForSingleObject(event1,1);
}
ResetEvent(event1);
m_ctrlWeb.Navigate(ListIter1->c_str(), NULL, NULL, NULL, NULL);
}
}
этот код выдает access violation
Как правильно сделать?
Вызываю iewebbrowser->Navigate(URL);
после чего нужно на его событие NavigateComplete (когда ввсе загрузилось)
подождать 5 сек (чтобы можно было посмотреть на страницу), потом опять вызывать Navigate(URL); и так несколько раз.
Как можно реализовать?
Код:
BOOL Cvxbot1Dlg::OnInitDialog()
{
...
URList.push_back(L"http://...");
ListIter1 = URList.begin();
//Создаем событие с автосбросом в занятом состоянии
event1 = CreateEventW(NULL,FALSE,FALSE,L"vx_event_234");
_beginthread(TrFoo,1024,NULL);
return TRUE;
}
void Cvxbot1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == IDT_TIMER1)
{
KillTimer(theTIMER);
if(ListIter1 == URList.end())
{
ListIter1 = URList.begin();
}
SetEvent(event1);
}
}
void Cvxbot1Dlg::OnDestroy()
{
CloseHandle(event1);
}
BEGIN_EVENTSINK_MAP(Cvxbot1Dlg, CDialog)
ON_EVENT(Cvxbot1Dlg, IDC_EXPLORER1, 252, Cvxbot1Dlg::NavigateComplete2Explorer1, VTS_DISPATCH
VTS_PVARIANT)
END_EVENTSINK_MAP()
void Cvxbot1Dlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
ListIter1++;
theTIMER = SetTimer(IDT_TIMER1, 5000, 0);
}
void TrFoo(void *pv)
{
DWORD dwWaitResult = 1;
while(true)
{
dwWaitResult = WaitForSingleObject(event1,INFINITE);
//функция срабатывает и переходит в занятое состояние, освободит его только SetEvent
m_ctrlWeb.Navigate(ListIter1->c_str(), NULL, NULL, NULL, NULL);
}
}
{
...
URList.push_back(L"http://...");
ListIter1 = URList.begin();
//Создаем событие с автосбросом в занятом состоянии
event1 = CreateEventW(NULL,FALSE,FALSE,L"vx_event_234");
_beginthread(TrFoo,1024,NULL);
return TRUE;
}
void Cvxbot1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == IDT_TIMER1)
{
KillTimer(theTIMER);
if(ListIter1 == URList.end())
{
ListIter1 = URList.begin();
}
SetEvent(event1);
}
}
void Cvxbot1Dlg::OnDestroy()
{
CloseHandle(event1);
}
BEGIN_EVENTSINK_MAP(Cvxbot1Dlg, CDialog)
ON_EVENT(Cvxbot1Dlg, IDC_EXPLORER1, 252, Cvxbot1Dlg::NavigateComplete2Explorer1, VTS_DISPATCH
VTS_PVARIANT)
END_EVENTSINK_MAP()
void Cvxbot1Dlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
ListIter1++;
theTIMER = SetTimer(IDT_TIMER1, 5000, 0);
}
void TrFoo(void *pv)
{
DWORD dwWaitResult = 1;
while(true)
{
dwWaitResult = WaitForSingleObject(event1,INFINITE);
//функция срабатывает и переходит в занятое состояние, освободит его только SetEvent
m_ctrlWeb.Navigate(ListIter1->c_str(), NULL, NULL, NULL, NULL);
}
}
А вообще лучше написать в какой строке происходит access violation
Большое спасибо, все заработало!