缓冲区

为了解决:绘制屏幕时产生“闪烁”或者“蠕动”。
  为什么要使用双缓冲区?通过前面的学习我们知道当要绘制 屏幕时,我们只要调用paint函数即可。其中我们可以使用绘图方法来绘制任何文字图形图像。可是当我们绘制的东西多了之后,你就会发现又是屏幕上的显示根本不是我们要的结果,很杂乱。细想想,会知道因为paint函数中,我们是一边绘制一边显示,所以当内容过多,就会产生没绘制完成,就显示到屏幕上的结果。
  因此,双缓冲区就提供了一个完美的解决方案。我们可以在缓冲区2中绘制图像,而是用缓冲区1来输出到屏幕。这样我们就可以控制绘制和现实的过程,从而避免上面的现象。

2 2.设备驱动和工控方面编辑本段

          1.为啥要双缓冲区 
  记得前几天在介绍队列缓冲区 时,提及了普通队列缓冲区的两个性能问题:“ 内存分配的开销”和“同步/互斥的开销”(健忘的同学,先回去看看那个帖子 复习一下)。“内存分配的开销”已经在介绍环形缓冲区 的时候解决了,而今天要介绍的双缓冲区,就是冲着同步/互斥的开销来的。 为了防止有人给咱扣上“过度设计”的大帽子,又得来一个事先声明:只有当同步或互斥的开销非常明显的时候,你才应该考虑双缓冲区的使用。否则的话,大伙儿还是老老实实用最基本、最简单的队列缓冲区吧。
  2.双缓冲区的原理 
  所谓“双缓冲区”,故名思义就是要有俩缓冲区(简称A和B)。这俩缓冲区,总是一个用于生产者,另一个用于消费者。当俩缓冲区都操作完,再进行一次切换(先前被生产者写入的转为消费者读出,先前消费者读取的转为生产者写入)。由于生产者和消费者不会同时 操作同一个 缓冲区(不发生冲突),所以就不需要在读写每一个  数据单元 的时候都进行同步/互斥操作。顺便提一下,这又一次展现了空间换时间 的优化思路。 但是光有俩缓冲区还不够。为了做到“不冲突”,还得再搞两个 互斥锁(简称La和Lb),分别对应俩缓冲区。生产者或消费者如果要操作某个缓冲区,必须先拥有对应的互斥锁。补充一句:要达到“不冲突”的效果,其实可以有多种搞法,今天只是挑一个简单的来聊。
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值