谷歌瀏覽器的原始碼分析 30

2021-04-21 14:01:58 字數 1322 閱讀 3857

上次說到函式winhttpreaddata

通過上面的函式可以看到,當資料接收完成後,就會呼叫docallback函式處理接收到的資料。docallback函式的**如下:

看到這裡又是乙個**函式c->run的通知,它是呼叫開始建立這個連線時設定的**物件。如果是http請求,那麼這個請求**函式是物件urlrequesthttpjob裡的函式,也就是呼叫urlrequesthttpjob::onreadcompleted函式,這個函式是當資料接收完成,或接收失敗,或者接收還沒有完成時都會呼叫。這個函式**如下:

當上面讀取資料完成時,就開始把接收到資料通過類resourcedispatcherhost來傳送出去,而類resourcedispatcherhost傳送資料的方式比較特別,它不是通過訊息把整塊資料用命名管道傳送的,而是通過共享記憶體的方式讓另乙個程序來讀取資料,這樣達到速度快的特點,可見可多公尺處理處理考慮的都是速度,它的**如下:

#001bool onreadcompleted(int request_id, int* bytes_read)

#010

這裡建立共享記憶體。

#011sharedmemoryhandle handle;

#012if (!read_buffer_->givetoprocess(render_process_, &handle))

#020

把共享記憶體通過管道訊息傳送給渲染程序。

#021receiver_->send(new viewmsg_resource_datareceived(

#022routing_id_, request_id, handle, *bytes_read));

#023

#024return true;

#025}

#026

谷歌瀏覽器的原始碼分析 8

上一次說到處理wm char訊息,當使用者每鍵入乙個字元時,萬能連線框就會去進行一次查詢的過程,然後把智慧型提示資訊顯示出來。說到autocompleteedit handlekeystroke函式的操作,那麼它為什麼需要凍結這個函式的使用呢?現在就來分析這部份的內容。如下 scopedfreeze...

谷歌瀏覽器的原始碼分析 32

上一次說到在類resourcedispatcher會收到接收http資料訊息,並進一步處理資料。那麼resourcedispatcher類又把接收到的資料發往何處呢?這是需要我們去搞懂它的。通過進一步的跟蹤,會發現在resourcedispatcher onreceiveddata函式呼叫webco...

谷歌瀏覽器的原始碼分析 2

上面顯示了多種語言的動態連線庫資源,其中zh cn是簡體中文的。接著開啟資源檔案的字串編輯,如下圖 把上面的字串修改為 關於 可多公尺 然後把這個工程重新編譯一下,就會生成下面的檔案 然後執行自己編譯的可多公尺,就會顯示出修改的成果,如下圖 可以看到關於對話方塊的標題,就變成我上面修改的了。這樣學習...