Im에 gdi 함수에서 이상한 액세스 위반이 발생했습니다. 내 응용 프로그램은 그래픽 엔진과 같아서 여러 스레드가 다른 그래픽 객체의 그리기를 요청합니다. 단일 스레드는 모든 그래픽 객체를 메모리 DC에 그립니다. 이 스레드 간의 동기화가 올바르다.gdi 함수가 충돌했습니다.
userdump를 준비했을 때 두 스레드에서 액세스 위반이 발생했습니다. 다음은 두 스레드의 호출 스택입니다. GetTextExtentPoint32와 CreateFontIndirect는 충돌합니다.
// Access violation from Draw Request thread.
ntdll!KiUserExceptionDispatcher+0xe
ntdll!RtlRaiseStatus+0x26
ntdll!RtlpUnWaitCriticalSection+0x3b
ntdll!RtlLeaveCriticalSection+0x1d
gdi32!GdiRealizationInfo+0x88
lpk!FontHasWesternScript+0x1e
lpk!LpkUseGDIWidthCache+0x89
gdi32!GetTextExtentPointWInternal+0x100
gdi32!GetTextExtentPoint32W+0x18
// Access violation from Drawing thread.
ntdll!KiUserExceptionDispatcher+0xe
ntdll!RtlRaiseStatus+0x26
ntdll!RtlpWaitForCriticalSection+0x204
ntdll!RtlEnterCriticalSection+0x46
gdi32!CreateFontIndirectExW+0x26
gdi32!CreateFontIndirectW+0x61
GetTextExtentPoint32 및 CreateFontIndirect 충돌의 가능한 원인은 무엇입니까? 애플리케이션에서 두 가지 액세스 위반이 발생하지 않았습니다. 어떻게됩니까? 이 응용 프로그램은 거의 안정적이며 이러한 지점에서 액세스 위반이 발생하지 않습니다. CreateFontIndirect (NULL)을 호출하여 액세스 위반을 시도했지만 충돌이 발생하지 않았습니다. 이유를 찾으려면 ...
'스레드 간의 동기화가 정확합니다 .' ... ** ** 확실합니까? – SLaks