[原創]嵌入CEF遇到的問題及解決方案


這幾天程序嵌入谷歌瀏覽器,各種坑,不容易,記錄之。。。希望到此為止

1. 開了多進程模式之后,渲染進程RenderProcess斷點沒有進入。

  只有在單進程模式(CefSingleProcess為true)下調試,渲染進程的斷點才會進入。如果開多進程模式,那么渲染進程是在另外一個進程,不是主進程,當前調試進程是主進程,所以就沒法進入渲染進程的斷點,但是實際上,渲染進程的RenderProcessHandler的方法還是會被觸發的。

 

2. 在渲染進程操作瀏覽器進程沒有效果。

  渲染進程(RenderProcess)和瀏覽器進程(BrowserProcess)之間的通訊必須通過進程間通訊才可以,直接調用是沒有效果的。不管是在多進程模式下還是在單進程模式下。

 

3. 多進程模式下進程間通訊傳接口地址失敗。

  多進程模式下,進程不在同一個地址空間,不能直接傳地址,只能傳值類型。

4. 在多進程模式下,有的情況會出現子進程無法退出的問題。

  修改CefShutDown的時機,不要在finalization里面做,而是移到程序退出前,在釋放了所有的Browser后就直接調用退出操作。

 

5. 快速打開很多頁面時整個程序會卡死。

  猜測是GPU合成的問題,關閉后就沒有這個現象了。GPU也會新開一個進程的,關閉GPU就會減少一些進程創建。

 

6. 每開一個Tab都會創建一個進程。

  參考下面的說明,根據需求開啟不同的進程模型。

    1. Process-per-site-instance:就是你打開一個網站,然后從這個網站鏈開的一系列網站都屬於一個進程。這是Chrome的默認模式。
    2. Process-per-site:同域名范疇的網站放在一個進程,比如www.google.com和www.google.com/bookmarks就屬於一個域名內(google有自己的判定機制),不論有沒有互相打開的關系,都算作是一個進程中。用命令行--process-per-site開啟。
    3. Process-per-tab:這個簡單,一個tab一個process,不論各個tab的站點有無聯系,就和宣傳的那樣。用--process-per-tab開啟。
    4. Single Process:這個很熟悉了吧,傳統瀏覽器的模式,沒有多進程只有多線程,用--single-process開啟。

7. 沒有了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM