首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdi函数崩溃

gdi函数崩溃
EN

Stack Overflow用户
提问于 2012-12-17 23:12:14
回答 2查看 537关注 0票数 0

我从gdi函数中得到了奇怪的访问冲突。我的应用程序就像一个图形引擎,多个线程会请求绘制不同的图形对象。单个线程将所有图形对象绘制到内存DC。这些线程之间的同步是正确的。

当我准备userdump时,两个线程发生访问冲突。下面是两个线程的调用栈,GetTextExtentPoint32和CreateFontIndirect都崩溃了。

代码语言:javascript
复制
// 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 )来获取访问冲突,但它没有崩溃。请帮我找个理由..

EN

回答 2

Stack Overflow用户

发布于 2012-12-18 01:50:41

你有两个不同的线程同时处理GDI调用。如果这些调用涉及相同的设备上下文或GDI对象,那么您的线程同步中存在错误。

票数 1
EN

Stack Overflow用户

发布于 2012-12-18 04:04:53

你很可能是closed a handle twice by accident, or otherwise corrupted the critical section

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13916734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档