none
GdiplusShutdown 문제 RRS feed

  • 질문

  • 프로그램이 종료될 때 GdiplushShutdown 함수에서 빠져나오지를 못하는 일이 가끔 있네요.

    가끔(2~3% 정도) 태스크가 안죽길래 디버깅 해보니 딱 거기서 멈춰 있습니다.

    MFC MDI이고, InitInstance 에서 m_pMainWnd 할당한 다음 GdiplusStartup 했고, ExitInstance에서 정리할 거 다 하고 호출 했어요.

    뭐가 문제일까요?

    소켓이랑 OLEDB 사용하는데, 그 전에 정리해도 차이가 없는 것 같습니다.

    매번 그러면 모르겠는데, 정말 가끔 다시 빌드해서 실행하다보면 안죽고 있을 때가 있어요.

    대체 어떤 매커니즘으로 동작하길래 그러는 걸까요?

    2019년 7월 10일 수요일 오전 1:30

모든 응답

  • 안녕하세요

    GdiplusStartup 와 GdiplusShutdown은 dllmain에서 호출 할 수 없습니다, 그런 경우 Deadlock을 이르킬수가 있습니다.

    GDI+를 사용하는 DLL을 만들려면 아래 기술 중 하나를 사용하여 GDI+를 초기화하는것을 추천합니다.
    1. DLL중의 함수를 호출하기 전에 GdiplusStartup을 호출하게 하며, DLL 사용이 끝나면 GdiplusShutdown을 호출하게 합니다.
    2. GdiplusStartup을 호출하는 startup 함수와 GdiplusShutdown을 호출하는 shutdown 함수를 export 합니다. DLL의 다른 함수를 호출하기 전에 startup 함수를 호출하게 하고, DLL 사용이 끝나면 shutdown 함수를 호출하게 합니다.
    3. 모든 GDI+ 호출을 수행하는 함수에서 GdiplusStartup 및 GdiplusShutdown을 호출합니다.

    디테일에 대해서는 해당 링크를 참조하시기 바랍니다. https://docs.microsoft.com/zh-cn/windows/win32/api/gdiplusinit/nf-gdiplusinit-gdiplusstartup

    MSDN Community Support Ricky

    다른 커뮤니티 멤버에게 도움이 될 수 있게 문제를 해결 한 답변을 '답변으로 표시'를 클릭하시고 그렇지 않은 경우 '답변으로 표시 취소'를 클릭하시기 바랍니다. MSDN 서포트에 대한 의견이나 불만이 있을 경우 MSDNFSF@microsoft.com 으로 연락하시기 바랍니다.

    2019년 7월 10일 수요일 오전 10:09
    중재자