blink跨线程解析html有点小问题

来源:互联网 发布:起点网络写手新手收入 编辑:程序博客网 时间:2024/05/16 05:28

BackgroundHTMLParser::updateDocument里会

Platform::current()->mainThread()->postTask(FROM_HERE, 

threadSafeBind(&HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser, AllowCrossThreadAccess(m_parser), encodingData));


发一个编码名字给主线程,但如果主线程过快的收到资源接收完成的消息:

> node.dll!blink::HTMLDocumentParser::stopBackgroundParser() 行 805C++
  node.dll!blink::HTMLDocumentParser::end() 行 859C++
  node.dll!blink::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() 行 873C++
  node.dll!blink::HTMLDocumentParser::prepareToStopParsing() 行 273C++
  node.dll!blink::HTMLDocumentParser::processParsedChunkFromBackgroundParser(WTF::PassOwnPtr<blink::HTMLDocumentParser::ParsedChunk> popChunk) 行 511C++
  node.dll!blink::HTMLDocumentParser::pumpPendingSpeculations() 行 563C++
  node.dll!blink::HTMLDocumentParser::resumeParsingAfterScriptExecution() 行 1000C++
  node.dll!blink::HTMLDocumentParser::notifyScriptLoaded(blink::Resource * cachedResource) 行 1036C++
  node.dll!blink::HTMLScriptRunner::notifyFinished(blink::Resource * cachedResource) 行 200C++
  node.dll!blink::Resource::checkNotify() 行 253C++
  node.dll!blink::Resource::finishOnePart() 行 305C++
  node.dll!blink::Resource::finish() 行 312C++
  node.dll!blink::ResourceLoader::didFinishLoading(blink::WebURLLoader * __formal, double finishTime, __int64 encodedDataLength) 行 476C++
  node.dll!net::WebURLLoaderManager::handleDidFinishLoading(net::WebURLLoaderInternal * job, double finishTime, __int64 totalEncodedDataLength) 行 471C++


就会关掉这个BackgroundHTMLParser,导致这个HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser,收不到,从而发生乱码

原创粉丝点击