ispatcher。base库中的UI消息循环代码如下:
ispatch(const MSG &msg)
eekMessage(const_cast<MSG*>(&msg), NULL, 0, 0, PM_NOREMOVE))
oClose接口被触发,这里不需要做额外处理,直接返回就可以
oLogout函数,在这里会调用到代码nim_comp:: WindowsManager::GetInstance()->DestroyAllWindows();,这里销毁所有的窗体,所有控件被销毁,自然就会触发所有CefControl控件的销毁流程,所有浏览器对象被关闭
oLogout函数里之后会调用到UILogoutCallback函数,这里原本会调用PostQuitMessage(0)函数结束消息循环,但是我们应该等待所有浏览器对象关闭后在结束消息循环,否则会发生错误。而CefBrowser的关闭是异步的,所以无法保证调用UILogoutCallback函数时所有CefBrowser被关闭
ostQuitMessage函数里判断当前浏览器对象的数量来决定是否退出消息循环,如果还有浏览器对象没有关闭就等待500毫秒后再检测:
ostQuitMessage(int nExitCode)
ostQuitMessage(nExitCode);
ostQuitMessage(nExitCode);
ostDelayedTask(kThreadUI, cb, nbase::TimeDelta::FromMilliseconds(500));
ostQuitMessage函数的地方,修改为nim_cef:: CefManager::GetInstance()->
ostQuitMessage(0);| 欢迎光临 firemail (http://firemail.wang:8088/) | Powered by Discuz! X3 |