Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在CDC SelectObject()调用中断言失败-我可以尝试什么?

在CDC SelectObject()调用中断言失败-我可以尝试什么?
EN

Stack Overflow用户
提问于 2009-10-16 08:52:07
回答 1查看 1.9K关注 0票数 4

我正在开发一个多线程的win32 MFC应用程序。我们正在渲染一幅地图,并将其显示在用户界面的窗格中,并在顶部显示自定义渲染的对象。渲染速度很慢(大约800ms),这是在用户界面线程上发生的。

我正在尝试将渲染移动到它自己的线程上,以便菜单仍然保持快速,而其他渲染仍然可以在后台运行。绘图线程将使用它自己的CDC连续渲染。UI线程将调用一个重画函数,该函数锁定互斥锁,并获取CBitmap的最后一个快照,并使用UI的CDC绘制它。使用绘制线程的CDC的每个位置都被互斥锁。

我看到的是线程通过CreatCompatibleBitmap创建一个新的CBitmap,然后尝试将新的CBitmap对象选择到绘图线程的CDC中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this->m_canvas.CreateCompatibleDC(&compatibleDC);
this->m_bitmap = new CBitmap();
this->m_bitmap->CreateCompatibleBitmap(&compatibleDC, m_width, m_height);

m_oldBitmap = this->m_canvas.SelectObject(m_bitmap);

此时,CGdiObject::FromHandle()中出现调试断言失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CGdiObject* PASCAL CGdiObject::FromHandle(HGDIOBJ h)
{
    CHandleMap* pMap = afxMapHGDIOBJ(TRUE); //create map if not exist
    ASSERT(pMap != NULL);
    CGdiObject* pObject = (CGdiObject*)pMap->FromHandle(h);
    ASSERT(pObject == NULL || pObject->m_hObject == h);
    return pObject;
}

第二个ASSERT失败,因为m_hObject与传入的句柄不匹配。基本上,MFC接受句柄,并进行查找,以获得一个与刚创建的CBitmap不匹配的CBitmap对象。

这对任何人来说都很熟悉吗?可能发生了什么导致FromHandle方法返回错误的对象?我为绘图线程创建CDC,然后一遍又一遍地重用它的方式有没有根本的缺陷?有什么方法可以帮助调试/解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-16 17:23:31

金色的。句柄和对象之间的映射在thread-local storage中。

在多线程环境中,由于窗口归线程所有,

将临时和永久窗口句柄映射保存在线程本地存储区中。其他句柄映射也是如此,比如GDI对象和设备上下文。将窗口句柄映射保存在线程本地存储中可确保防止多个线程同时访问。

所以基本上,存储句柄,然后从句柄创建一个CBitmap,以便在线程之间操作它们。

我的错误在于UI线程创建了我的CBitmap,然后从两个线程访问CBitmap对象。

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

https://stackoverflow.com/questions/1579154

复制
相关文章
浅谈CDC在微服务中的应用
CDC(Change Data Capture)是一种通过监测数据变更(变更包括新增、修改、删除等)而对变更的数据进行进一步处理的一种设计模式,通常应用在数据仓库以及和数据库密切相关的一些应用上,比如数据同步、备份、审计、ETL等。实际上,早在二十多年前,CDC就已经用来将应用系统的数据变更实时发送到数据仓库,进一步转换后传递到数据分析系统,这样能够在极小地影响生产的情况下,有效而及时地将数据传递到消费方。而在微服务架构逐渐流行的今天,这种古老的技术是否能够焕发新的生机?
ThoughtWorks
2019/08/09
1.5K0
浅谈CDC在微服务中的应用
在vue中的html标签{{}}内可以调用函数方法
今天领导提个需求,要求在金额上强制保留两位小数,本想着后台直接返回数据时,带着两位的小数,前端只是做个显示作用,后台说保留了小数但在传输过程中去掉了,可能他们做了格式转化。没办法了只能又是我们前端操作了,牵扯价钱的太多了,很多时候又有for 循环,怎么办呢?
honey缘木鱼
2019/02/26
30.9K0
我可以在一个构造函数中调用另一个构造函数么
但在 C++11 版本之前是不可以的,不过你可以通过两种方式来模拟实现(可以参见 the C++ FAQ entry),
ClearSeve
2022/02/10
3K0
图像处理程序框架—MFC相关知识点
CDC:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。
流川疯
2019/01/18
1.5K0
CreateCompatibleDC与BitBlt绘图
hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。
全栈程序员站长
2022/07/23
5540
基于VC2019开始C++之第一个MFC程序(画图)
以下内容参考https://blog.csdn.net/qq_36556893/article/details/89946636
心跳包
2021/02/07
3.8K0
Pytest之pytest-assume同用例多断言,断言1失败会执行后续代码及断言2
一般我们做自动化测试时,一个用例会写多个断言,当第一个断言失败后,后面的代码就不会执行了,于是我们引进了pytest-assume插件可以解决断言失败后继续断言的问题。
王大力测试进阶之路
2020/05/29
3.2K0
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.7K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.1K0
在Java中调用Python
基于VS2019开始C++之第一个MFC程序
以下内容参考https://blog.csdn.net/qq_36556893/article/details/89946636
心跳包
2021/09/26
1.5K0
基于VS2019开始C++之第一个MFC程序
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
全栈程序员站长
2022/07/05
1.9K0
关于lr调用jar在vuser中可以运行,但是controller中却报错的问题
如题,错误如下:javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 查找了很多地方,没有找到原因,很偶然的在一个帖子里面发现了上述错误,虽然不是loadrunner的。但还是拿来试了试。居然解决了这个问题。 方法:在java vuser中的init中加上如下两句话: System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");         System.setProperty("javax.xml.parsers.SAXParserFactory","com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
流柯
2018/08/30
8610
SVA断言学习|01.什么是断言(SVA)
这是我自己的学习笔记,基于《SystemVerilog Assertions应用指南》这本书,记录一些我觉得重要的知识点。在芯片验证的过程当中,多多少少都会遇到断言,掌握断言,对于某一些场景下的验证是非常方便的。
用户10108023
2022/10/28
1.1K0
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
欢醉
2018/01/22
2.3K0
在Oracle中,什么是坏块?坏块可以分为哪几类?
Oracle数据文件的坏块可以分为物理坏块(Physical Block Corruptions)和逻辑坏块(Logical Block Corruptions)。坏块通常是通过Oracle的ORA-01578错误报告出来的,详细的损坏描述会在告警日志中打印出来,“oerr ora”对该错误的解释如下所示:
AiDBA宝典
2023/08/09
5810
在Oracle中,什么是坏块?坏块可以分为哪几类?
在cuda的核函数中可以按地址调用普通变量么?
请问在cuda的核函数中可以按地址调用普通变量么? GPU世界论坛 bbs.gpuworld.cn Hi, 楼主, 完全无问题,从Fermi起引入卡内统一编址(Generic Addressing)和卡间统一编址(UVA ) 开始,就毫无压力了,这都8年过去了。 但需要注意这个问题: (1)最终指向global memory地址空间的指针,可以在本次kernel启动,或者下次kernel启动的任何线程中都是有效的。 (2)最终指向local memory的指针,仅在本次kernel启动的本线程
GPUS Lady
2018/04/13
3.2K0
一次失败的漏洞串联尝试
在一次漏洞挖掘过程中,我发现 callback=jsonp_xxx 或者 callback=jQuery_xxx 这类格式的URL存在 XSS 漏洞,当时没有自己研究具体是怎么回事
意大利的猫
2023/09/05
2970
一次失败的漏洞串联尝试
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
bitblt函数 透明底图_手绘楼盘摆位图怎么画
CDC::BitBlt函数,应用在GDI的绘图中,有时候我们需要显示的位图有一部分是透明的,例如在棋类游戏中,棋盘图片和棋子图片融合的时候,棋子边缘应该是透明。
全栈程序员站长
2022/11/02
6160
bitblt函数 透明底图_手绘楼盘摆位图怎么画
Postman中的断言
主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。
伤心的辣条
2022/12/14
8820
Postman中的断言

相似问题

为什么CDC::SelectObject仅适用于CFont版本?

21

为什么CDC::SelectObject(c头*)接受CFont对象与指针?

20

有人能给我解释一下CDC::SelectObject吗?

24

是否可以尝试在静态库(c++)中捕获断言调用

13

为什么SelectObject会被调用两次?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文