Позвольте мне поговорить о процессе закрытия CEF3.2171 под окнами, в котором будет цитироваться часть официальных библиотечных документов и личный псевдокод, чтобы помочь понять — ниже приводится перехват заголовка из cef_life_span_handler.h Файл документов, поэтому он по-прежнему записывает часть документов в файл заголовка. В соответствии со своим процессом он может быстро разобраться в соответствующей логике.
if (browser_. get ()) // Request that the main browser close. 
browser_-> GetHost ()-> CloseBrowser (force_close); 
> 
>
прерывистый. В конце концов, сработает один или несколько CloseBrowser => CefBrowserHostImpl :: CloseBrowser => CefBrowserHostImpl :: CloseContents
void CefBrowserHostImpl::CloseBrowser(bool force_close) < if (CEF_CURRENTLY_ON_UIT()) < // Exit early if a close attempt is already pending and this method is // called again from somewhere other than WindowDestroyed(). if (destruction_state_ >= DESTRUCTION_STATE_PENDING (IsWindowless() || !window_destroyed_)) < if (force_close destruction_state_ == DESTRUCTION_STATE_PENDING) < // Upgrade the destruction state. destruction_state_ = DESTRUCTION_STATE_ACCEPTED; > return; > if (destruction_state_ < DESTRUCTION_STATE_ACCEPTED) < destruction_state_ = (force_close ? DESTRUCTION_STATE_ACCEPTED : DESTRUCTION_STATE_PENDING); >content::WebContents* contents = web_contents(); if (contents contents->NeedToFireBeforeUnload()) < CefRefPtr<CefBrowserHostImpl> browser(this); DestroyBrowser(); if (!IsWindowless()) < Release(); > >
> else if (destruction_state_ != DESTRUCTION_STATE_NONE) destruction_state_ = DESTRUCTION_STATE_NONE;
Использование Chromium Embedded Framework для разработки серверных приложений
> 
>
нашел наш интерфейс DoClose в CloseContents. Фактически, эта функция также имеет интерфейс OnBeforeClose, который мы хотим обработать, и DestroyBrowser содержит его.
void CefBrowserHostImpl::DestroyBrowser() < CEF_REQUIRE_UIT();
if (client_. get ()) CefRefPtr handler = client_-> GetLifeSpanHandler (); 
if (handler. get ()) // Notify the handler that the window is about to be closed. 
handler-> OnBeforeClose ( this ); // `CefLifeSpanHandler::OnBeforeClose 
> 
> 
// Опустить 
>
Здесь нам нужно иметь такую предварительную концепцию стека вызовов (будет изменена позже ..)
=> означает синхронный вызов -> асинхронный вызов [os]window close => [Отдельный] браузер (ы) закрыть => [cef]CefBrowserHostImpl::CloseBrowser => [cef]CefBrowserHostImpl::CloseContents => [Реализуйте интерфейс cef] CefLifeSpanHandler :: DoClose => [cef]CefLifeSpanHandler::DestroyBrowser => [Реализовать интерфейс cef] CefLifeSpanHandler :: OnBeforeClose => [os] Запретить закрытие окна
3-5. js и операции интерактивного уровня, опущены, одна из которых — js onunload, дает вам возможность уведомить о завершении работы на уровне js, например, уведомить собственный поток в фоновом режиме о выполнении действий самоочистки. , В особенности собственный поток, который взаимодействует с JS после сохранения cefQuery. 6. Вызывается интерфейс DoClose. A. Позволяет установить некоторые состояния, указывающие, что браузер закрывается. B. «return false;» Нам не нужно срочно закрывать его (кажется, это зарезервированный интерфейс или (Для других платформ) 7.cef отправляет действие закрытия на системном уровне, чтобы обнаружить, что предыдущий стек вызовов необходимо изменить, поскольку здесь асинхронная операция) CloseContents => PlatformCloseWindow => CefBrowserHostImpl :: PlatformCloseWindow = > PostMessage WM_CLOSE
[TUTORIAL CEF: #1] Начало работы с Chromium Embedded Framework | Сборка проекта веб-браузера С++
void CefBrowserHostImpl::PlatformCloseWindow() < if (window_info_.window != NULL) < HWND frameWnd = GetAncestor(window_info_.window, GA_ROOT); PostMessage(frameWnd, WM_CLOSE, 0, 0); > >
if (osr_handler_.get()) < osr_handler_->OnBeforeClose(browser); osr_handler_ = NULL; > 
> else if (browser-> IsPopup ()) // Remove from the browser popup list. 
BrowserList::iterator bit = popup_browsers_. begin (); 
for (; bit != popup_browsers_. end (); ++bit) if ((*bit)-> IsSame (browser)) popup_browsers_. erase (bit); 
break ; 
> 
> 
>
if (–browser_count_ == 0 ) // All browser windows have closed. 
// Remove and delete message router handlers. 
MessageHandlerSet::const_iterator it = message_handler_set_. begin (); 
for (; it != message_handler_set_. end (); ++it) message_router_-> RemoveHandler (*(it)); 
delete *(it); 
> 
message_handler_set_. clear (); 
message_router_ = NULL ;
  XCefAppManage::Instance ()-> QuitMessageLoop (); 
> 
>
Я оценил «—browser_count_ == 0» и начал инициировать настоящее завершение работы.
- Реальная логика завершения работы, инициированная отдельным лицом, уничтожает все браузеры и связанные с ними операции в OnBeforeClose. После уничтожения компонента cefquery запускается общий процесс завершения работы (завершение работы выполняется асинхронно)
void XCefAppManage::QuitMessageLoop() < if (GetCefSettings().multi_threaded_message_loop) < // Running in multi-threaded message loop mode. Need to execute // PostQuitMessage on the main application thread. if (NULL == message_wnd__) < message_wnd__ = ::FindWindow(XWinUtil::GetMessageWindowClassName(XWinUtil::GetParentProcessID()), NULL); > DCHECK(message_wnd__); PostMessage(message_wnd__, WM_COMMAND, ID_QUIT, 0); > else < CefQuitMessageLoop(); > >
Если цикл сообщений, созданный CefRunMessageLoop, соответствует CefQuitMessageLoop до конца, другие способы обработки будут странными. Я использую скрытое окно, чтобы завершить цикл системных сообщений на примере cefclient
PostMessage(message_wnd__, WM_COMMAND, ID_QUIT, 0);
Обработка очень проста, для выхода из цикла вызывается собственный API PostQuitMessage.
case ID_QUIT: PostQuitMessage(0); return 0;
Выйти из цикла сообщений 
CefShutDown
Интеллектуальная рекомендация
Понимание и применение аннотаций Java
Я считаю, что большинство застройщиков Java встречаются и используют много аннотаций в процессе разработки, такие как Retrofit Retrofit Android, Backend Spring Furnal Forgets и т. Д., Использовали мно.
Источник: russianblogs.com
Что такое Cef.exe? Как исправить связанные с ним ошибки? [РЕШЕНО]
В большинстве случаев проблемы, связанные с файлами cef.exe, возникают в результате отсутствия или повреждения файла (вредоносное ПО / вирус) и часто наблюдаются при запуске программы Third-Party Application. В большинстве случаев скачивание и замена файла EXE позволяет решить проблему. Более того, поддержание чистоты реестра и его оптимизация позволит предотвратить указание неверного пути к файлу (например cef.exe) и ссылок на расширения файлов. По этой причине мы рекомендуем регулярно выполнять очистку сканирования реестра.
Windows Executable File форматы, классифицируемые в качестве Исполнимые файлы, чаще всего имеют расширение EXE. Ниже вы также можете найти последние версии файлов для %%os%% (и для других версий ОС). В настоящее время в нашей безе отсутствуют некоторые файлы cef.exe, однако вы можете получить их по запросу, нажав на кнопку Request (Запрос) рядом с соответствующей версией файла. Если ниже отсутствует необходимая версия файла, мы рекомендуем вам связаться непосредственно с Windows Software Developer.
Настоятельно рекомендуется выполнить проверку и убедиться в том, что файл был размещён в правильном каталоге. Тщательно следуйте настоящим инструкциям, чтобы устранить возникающую ошибку, связанную с файлом cef.exe, однако мы рекомендуем выполнить быструю проверку. Проверьте, результат замены файла, запустив Third-Party Application и убедившись, что сообщение об ошибке больше не выводится.
| File: | EXE | 
| Тип приложения: | |
| Application: | Third-Party Application | 
| Версия выпуска: | 1.0 | 
| Разработчик: | Windows Software Developer | 
| Имя: | cef.exe 3dfa808f553895e76447b6464a8fdf109778917f | 
| MD5: | 714c388deaf796af152e6cd764c0a2f5 | 
| CRC32: | 
Источник: www.solvusoft.com
cef_frame_render.exe — что это?

cef_frame_render.exe — компонент встроенного браузера Хром для отображения веб-содержимого, может использоваться например в эмуляторе Android GameLoop.
Скажу сразу — если у вас установлен GameLoop, тогда попробуйте отключить там боковую панель Appmarket.
Разбираемся
- Информации в интернете не так много. Но удалось выяснить, что cef_frame_render.exe идет от эмулятора приложений Андроид GameLoop.
- Процесс может постоянно висеть в фоне, может ухудшать пинг. Нашел не один комментарий, где пишут что cef_frame_render.exe появился после установки эмулятора GameLoop.
- Оказывается эмулятор GameLoop имеет некую боковую панель Appmarket, которая возможно отображает веб-содержимое. Именно из-за нее и висит cef_frame_render.exe. Попробуйте закрыть Appmarket. Сам cef_frame_render.exe — компонент, позволяющий отображать веб содержимое (HTML, CSS). Спокойно может быть что Appmarket это на самом деле веб, за функционирование которого и отвечает cef_frame_render.exe.
- GameLoop — это эмулятор, позволяющий запускать Андроид-приложения на компьютере. Изначально создавался только для одной игры — PUBG mobile.
Внешний вид GameLoop:
 
Нашел скриншот, где видим принадлежность процесса cef_frame_render.exe к Танкам:
 
Процесс не спешите завершать:
- Этот процесс отвечает за отображение веб-данных в программе. В качестве программы может быть игра, где веб-данные это могут быть.. например магазин, где можно что-то купить, также если завершить процесс — может не работать лаунчер.
- cef_frame_render.exe может грузить процесс и кушать много оперативы? Да, конечно. Причина — этот компонент браузера Google Chrome для встраивания в приложения (включая игры).
- Самое разумное, если этот процесс грузит ПК — отключить в игре то, за что отвечает этот процесс.
- Если процесс просто завершить — могут быть ошибки в игре, если удалить файл cef_frame_render.exe то ошибки тем более могут быть.
Надеюсь данная информация оказалась полезной. Удачи и добра, до новых встреч друзья!
Источник: virtmachine.ru
