提问人:Optimus1 提问时间:4/10/2022 更新时间:4/11/2022 访问量:872
CEF 浏览器和多个线程
CEF Browser and multiple threads
问:
请解释一下:
假设我同时创建了三个浏览器,并开始在其中加载 URL CefBrowserHost::CreateBrowser(...)。
接下来,加载转到 void OnLoadEnd() 上的示例。
在 OnLoadEnd() 中,我将检查线程 ID:
void OnLoadEnd() override
{
std::cout << "OnLoadEnd_this_thread_ID:" << std::this_thread::get_id() << std::endl;
}
所有三个浏览器对 OnLoadEnd() 的所有调用都将具有相同的标识符线程。
事实证明,浏览器的加载会转到一个线程?
例如,如果只是为了一个例子,我在 OnLoadEnd() 中启动了某种繁重的计算,那么其余 URL 的加载将停止。
是否有可能以某种方式在不同的线程中运行浏览器?还是一样,所有浏览器只能在一个线程中工作?
答:
2赞
Vladimir
4/11/2022
#1
CEF 继承了 Chromium 多进程架构和线程模型。我想该函数是在 UI 线程上调用的。如果阻止它,您将阻止呈现 UI 并处理所有用户操作(如鼠标和键盘输入)的主 Chromium 线程。OnLoadEnd
我不认为通过阻止 UI 线程可以阻止加载其余 URL,因为 Chromium 在单独的 Chromium 进程中加载资源。所有网络活动都在那里工作。通过阻止 ,可以阻止其他通知,这些通知保留在消息队列中并等待释放 UI 线程。OnLoadEnd
无论如何,如果您需要启动某种繁重的计算,请在单独的线程中进行,并且不要阻止 Chromium UI 线程。
评论