上一次說到通過管道把接收到的http資料通知另乙個執行緒處理,它不是直接傳送資料過去,而是把資料在共享記憶體裡的控制代碼傳送過去,達到高效通訊的目的。下面就來分析資源處理程序裡,接收到這個訊息之後,做些什麼處理。這個訊息的處理**如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
#001 void resourcedispatcher::onreceiveddata(int request_id,
#002 sharedmemoryhandle shm_handle,
#003 int data_len)
#020
這裡找到相應的請求標識號,就把資料放到請求資訊裡處理。
#021 pendingrequestinfo& request_info = it->second;
#022
#023 if (data_len > 0 && shared_mem.map(data_len))
#029 }
上面這個函式實現接收到http資料,並且把資料放到請求的緩衝區裡,但它沒有知道什麼時候接收資料完成,顯然有另外乙個訊息來做這些的工作,就是下面類resourcedispatcherhost的函式:
#001 bool onresponsecompleted(int request_id, const urlrequeststatus& status) else if (read_buffer_.get() && read_buffer_->memory())
#011 return true;
#012 }
這個函式裡通過傳送訊息viewmsg_resource_requestcomplete來通知資源程序已經把網路的資料接收完成了,可以進入下一步處理。然後在資源程序裡就會處理這個訊息,下一次再來分析這方面的**。
谷歌瀏覽器的原始碼分析 8
上一次說到處理wm char訊息,當使用者每鍵入乙個字元時,萬能連線框就會去進行一次查詢的過程,然後把智慧型提示資訊顯示出來。說到autocompleteedit handlekeystroke函式的操作,那麼它為什麼需要凍結這個函式的使用呢?現在就來分析這部份的內容。如下 scopedfreeze...
谷歌瀏覽器的原始碼分析 30
上次說到函式winhttpreaddata 通過上面的函式可以看到,當資料接收完成後,就會呼叫docallback函式處理接收到的資料。docallback函式的 如下 看到這裡又是乙個 函式c run的通知,它是呼叫開始建立這個連線時設定的 物件。如果是http請求,那麼這個請求 函式是物件url...
谷歌瀏覽器的原始碼分析 32
上一次說到在類resourcedispatcher會收到接收http資料訊息,並進一步處理資料。那麼resourcedispatcher類又把接收到的資料發往何處呢?這是需要我們去搞懂它的。通過進一步的跟蹤,會發現在resourcedispatcher onreceiveddata函式呼叫webco...