一起学libcef--正确关闭你创建的浏览器

之前写了一些关于libcef的博客,水平很低,仅供初学者,应用者提供一些参考而已。

一起学libcef–给你的浏览器设置url

一起学libcef–一个应用libcef的简单例子(windows程序)

一起学libcef–搭建自己的libcef运行环境(Win32程序,错误C2220解决方案)

一起学libcef–源码文件介绍(VS2015运行DEMO)

每个CEF3应用程序都是相同的结构
提供入口函数,用于初始化CEF、运行子进程执行逻辑或者CEF消息循环。
提供CefApp实现,用于处理进程相关的回调。
提供CefClient实现,用于处理browser实例相关的回调
执行CefBrowserHost::CreateBrowser()创建一个browser实例,使用CefLifeSpanHandler管理browser对象生命周期。

现在就写一写如何正确关闭自己创建的浏览器。

很多人应该和我一样,把cef嵌入到了自己的客户端中。使用directui mfc qt等技术。原来你以为你退出自己的客户端时,你所创建的cef也会跟着关闭。

表面上似乎是正确的,但是,当你查看任务管理器的时候会发现,此时的cef browser进程还存在。

这就要求我们在退出客户端时,要关闭cef browser。

你很机智的找到了函数:
CefShutdown()

我们看看这个函数:

// This function should be called on the main application thread to shut down
// the CEF browser process before the application exits.
///
/*--cef()--*/
void CefShutdown();

再退出客户端的时候你调用了上面的函数。

你以为大功告成了,其实不然。

你还记不记得我们是怎么创建cef的,是不是先建立了一个消息循环,即使没有创建browser,这个messageloop依然存在的。

所以,我们再退出客户端的时候,也要记得杀死消息循环。

也很简单,你会发现一个函数:
CefQuitMessageLoop()

我们看看这个函数:

// Quit the CEF message loop that was started by calling CefRunMessageLoop().
// This function should only be called on the main application thread and only
// if CefRunMessageLoop() was used.
///
/*--cef()--*/
void CefQuitMessageLoop();

描述的很清楚了,就是要退出CefRunMessageLoop()开始的message loop。

调用以上提到的两个函数,你就会安全的退出客户端了。

水平有限,如果疑问,欢迎讨论!!!!

你可能感兴趣的:(libcef)