Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.211.107] |
|
Сообщ.
#1
,
|
|
|
Пытаюсь облегчить себе жизнь с разбором html. Беру из файла html (файл весит порядка 1 МБ) и пытаюсь с ним работать.
Если после pDoc->write поставить Sleep(3000) - все работает просто суперски. Без слипа "видит" только ничтожную часть элементов вначале страницы. Куда нужно копать? Что не так сделал? Буду благодарен. if(CoInitializeEx(NULL, COINIT_MULTITHREADED)==S_OK) { IHTMLDocument2* pDoc=NULL; if(CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC, IID_IHTMLDocument2, (void**)&pDoc)==S_OK) { SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1); if(psa!=NULL) { VARIANT *param; if(SafeArrayAccessData(psa, (LPVOID*)¶m)==S_OK) { param->vt = VT_BSTR; param->bstrVal = SysAllocString(pView); // pView это смапленный в память файл SafeArrayUnaccessData(psa); HRESULT hrWriteDoc=pDoc->write(psa); // Sleep(3000); если раскомментить - то всё работает идеально, иначе видит только часть страницы SafeArrayDestroy(psa); if(hrWriteDoc==S_OK && pDoc->close()==S_OK) { // работаем дальше } } } } } |
Сообщ.
#2
,
|
|
|
Возможно функция pDoc->write(psa) неблокирующая, и нужно дождаться окончания обработки, прежде чем очищать psa, яб на твоем месте почитал манул про сей объект у мелкомягких.
Добавлено Гхм. CoInitializeEx(NULL, COINIT_MULTITHREADED); Попробуй не мультипотоковый режим. |
Сообщ.
#3
,
|
|
|
Так в том и вопрос - как дождаться окончания, где его ловить. У мелкомягких такой пример и взял.
Цитата Gonarh @ Гхм. CoInitializeEx(NULL, COINIT_MULTITHREADED); Попробуй не мультипотоковый режим. Ни на что не влияет. |
Сообщ.
#4
,
|
|
|
Может посмотреть в сторону IHTMLDocument2::readyState ?
|
Сообщ.
#5
,
|
|
|
Цитата Парамон @ Цитата Gonarh @ Гхм. CoInitializeEx(NULL, COINIT_MULTITHREADED); Попробуй не мультипотоковый режим. Ни на что не влияет. Я бы всё таки рыл во всех направлениях |