文本基于对象面向对象.pptxVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于对象 vs 面向对象 基于对象 vs 面向对象 function bind 栗子 Thread Producer--Consumer Threadpool std::function std::functionR(T1, T2, ..., TN)  这是一个模板实现的函数对象类,它可以包装其它任意的函数对象,而被包装的函数对象具有类型为T1,T2,…,TN的参数,其返回值为R类型 function 对象的最大用处在于实现函数回调 bind bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体 绑定的参数的个数不受限制 绑定的具体哪些参数也不受限制,由用户指定 bind预先绑定的参数需要传具体的变量或值进去,是pass-by-value(值传递)的 对于不事先绑定的参数,需要传std::placeholders进去,从_1开始,依次递增 bind的返回值是可调用实体,可以直接赋给std::function对象 面向对象 vs 基于对象 面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是并不利用现有的对象模板产生新的对象类型,继而产生新的对象,即“基于对象”没有继承的特点。 “面向对象”和“基于对象”都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实现这些。 继承(面向对象) vs 组合(基于对象) Thread Thread封装 对Linux下的有关线程的接口进行封装 与线程有关的还有互斥锁和条件变量 实现: 生产者-消费者问题 一个多线程同步问题的经典案例 该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题 生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。 与此同时,消费者也要从缓冲区中消耗这些数据。 该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 实现: 线程池 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。 所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。 基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。 一个简单的线程池实现 线程池组件: 线程池管理器(ThreadPool):用于创建并管理线程池 工作线程(WorkThread): 线程池中的线程 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 任务队列(Queue):用于存放没有处理的任务。提供一种缓冲机制。 实现:

文档评论(0)

huang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档