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 |
댓글