上次說到函式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是簡體中文的。接著開啟資源檔案的字串編輯,如下圖 把上面的字串修改為 關於 可多公尺 然後把這個工程重新編譯一下,就會生成下面的檔案 然後執行自己編譯的可多公尺,就會顯示出修改的成果,如下圖 可以看到關於對話方塊的標題,就變成我上面修改的了。這樣學習...