본문 바로가기
개발 및 운영/프로그래밍

libcef 멈춰버리는 문제 해결

by Joseph.Lee 2018. 7. 2.

libcef을 사용하던 중...

화면을 드래그하거나 특정 작업을 하거나 아니면 그냥... 멈춰버려서 뻗어버리는 경우가 있었습니다.

메인스레드는 CPU을 11%정도를 계속 소비하면서...


이런 상황에 제 프로그램은 이런 구조였습니다.


main()

while(GetMessage(NULL, &msg, NULL, NULL))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}


CEF초기화 부분

cefSettings.multi_threaded_message_loop = 1; //needed for MFC projects (unless we want to implement custom message-loop)

cefSettings.single_process = 1;

CefInitialize(cefMainArgs, cefSettings, myCefApp, nullptr);


이렇습니다...


멈추는 당시 GetMessage속에 멈춰있으면서 (메세지가 없어 Loop을 돌지 않음) Window자체가 멈춰버리거나 cef browser 영역이 멈춰 어떤 클릭이나 동작도 안되는 현상이었으며

때론 최소화 후 다시 최대화시키면 동작하는 경우도 있었습니다..


왜 작업도 안하면서 GetMessage에서 멈추면서 CPU을 소비하는지.. 이유는 잘 모르지만..

쨋든 해결방안은...


cefSettings.multi_threaded_message_loop = 0; 으로 바꾸고

main()

while(GetMessage(NULL, &msg, NULL, NULL))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

CefDoMessageLoopWork();

}


이렇게 메시지 루프안에서 Cef메시지를 처리하도록 해 주었습니다.


예상하는건... main문의 GetMessage에서도 메세지를 받고 Cef의 Message pump에서도 메세지를 받으면서 뭔가 충돌이 나는듯 합니다..


반응형

'개발 및 운영 > 프로그래밍' 카테고리의 다른 글

OpenSSL FIPS 빌드  (0) 2019.06.19
WindowsPE에서 디버깅하기  (0) 2018.11.07
CodeVirtualizer 주의점 #1  (0) 2017.12.26
효율적인 그리고 안전한 소켓 통신 서버  (0) 2017.11.13
KiUserApcDispatcher Hooking  (0) 2017.10.21

댓글