模拟自主运行的对象(live object)

原创 2004年09月18日 10:09:00

  C++提供了封装对象的方法,但是没有提供多线程的支持,如果需要产生多个同时自主运行的对象(live-object),就需要定义我们自己的多线程类。MSDN中的《Using Multithreading and C++ to Generate Live Objects》对这个有趣的技术进行了详细的介绍。

       废话少说,先来看一下产生一个支持多线程类的结构,下面以animate_object为例,先看一下animate_object的构造函数:

可以看到,在构造函数中产生了一个线程,hThread, 用于表示该对象所联系的对象,并且用iStatus表示是否成功产生了该线程,其中hThread作为private成员,其并不为外界所知,外部环境获得该对象的信息的唯一方式就是通过iStatus,这样实现了数据的封装,而且iStatus还可以用于表示所有初始化工作的成功或者失败

       下面是线程函数。由于线程函数不能够是非静态成员函数,所以需要使用一个全局函数

该全局函数实际上是一个stub function, 在函数内部调用了animated_object 对象的成员函数MoveAndDraw,为了让该全局函数可以使用animated_object的私有函数,需要将该全局函数声明为animated_object的友员函数。

       下面是析构函数

当对象析构的时候,在析构函数内部等待线程结束,然后关闭线程,注意只有当初始化成功(iStatus0)的时候,才会调用这些cleanup的工作,现在唯一的问题就是:如果该线程自己调用析构函数,就会产生死锁(A调用BB返回的条件是A已经结束),这里可以采用postMessage的方式,特别要注意的是如果使用sendMessage,仍然会产生死锁(可以用共享变量的方法避免死锁)关闭的方式,在线程函数中使用postMessage将关闭自己的消息发送给外部控制线程,由外部控制线程关闭线程,这样在调用析构函数的时候就不会产生死锁的问题了。

       同步问题:当产生多个该类的实例的时候,如果需要访问共享变量,需要使用互斥同步的方法,下面是animated_object的核心部分

       结论:通过使用C++的封装特性和多线程,可以很好的模拟live object,其他复杂的应用也可以通过这种方式进行扩展,可以模拟bolzman机这种需要同步运行的程序,并且作为并行程序在多CPU环境下“真正”的并行。

Intellij IDEA中通过Live Templates快速生成一段固定格式的代码,如:文本注释等。

在Intellij IDEA中,如果想要快速生成一段代码,比如如下代码。 /** * Created with IntelliJ IDEA * Created by ustcck on 2016...
  • ck4438707
  • ck4438707
  • 2016年10月30日 23:12
  • 2669

linux中的livecd、liveDVD和其他安装方式简介

下载了几种不同格式的centos版本的iso文件,从而对比下各种iso文件的差别,下载的内容如下:    下载之后,分别在虚拟机中进行安装,从而查看有何区别: 1、 使用LiveCD进行安装 ...
  • kellyseeme
  • kellyseeme
  • 2015年07月13日 11:38
  • 8414

【工具】排版软件TeX Live 2016的简单使用

一些问题TeX是什么? TeX 是一个排版系统。 TeX和LaTeX 的区别? TeX 是 LaTeX 的基石,LaTeX 建立在 TeX 之上。TeX 不仅是一个排版程序,而且是一种程序语言...
  • shanchuan2012
  • shanchuan2012
  • 2016年12月04日 11:21
  • 2068

使用模拟对象(Mock Object)技术进行测试驱动开发

方 世明 (fangshim@cn.ibm.com), 软件工程师, EMC 方世明就职于 IBM 中国软件开发中心存储部门,从事存储设备管理软件的开发工作。 简介: 测试...
  • m13666368773
  • m13666368773
  • 2011年11月30日 11:56
  • 1638

mock object 测试 模拟对象

术语Tested Object – 被测对象Mock – 假的 or 仿制的对象 What is Mock Object?在讨论中我大致了解到Mock Object一般是用来做辅助单元测试,它负责隔离...
  • lionzl
  • lionzl
  • 2011年02月17日 17:20
  • 471

Object-C 类,对象,运行时,isa

如果不是Apple,不是App Store,Object-C恐怕早就淡出人们的视线了。大部分编程语言都是基于C语法风格的,所以初次接触这个非C风格的语言,会看不懂它那怪异的语法。但如果掌握了它之后,也...
  • intheair100
  • intheair100
  • 2015年03月25日 14:01
  • 386

Object-C 类,对象,运行时,isa

如果不是Apple,不是App Store,Object-C恐怕早就淡出人们的视线了。大部分编程语言都是基于C语法风格的,所以初次接触这个非C风格的语言,会看不懂它那怪异的语法。但如果掌握了它之后...
  • BSPLover
  • BSPLover
  • 2016年03月08日 11:04
  • 399

Object-C 类,对象,运行时,isa

如果不是Apple,不是App Store,Object-C恐怕早就淡出人们的视线了。大部分编程语言都是基于C语法风格的,所以初次接触这个非C风格的语言,会看不懂它那怪异的语法。但如果掌握了它之后,也...
  • wyyae007
  • wyyae007
  • 2015年03月06日 14:33
  • 198

Effective Object C 2.0——对象、消息和运行期

理解属性property,用于封装对象中的数据。setter,getter和点语法(dot syntax)。 定义实例变量的不足@interface EOCPerson: NSObject { @p...
  • gaoyan10
  • gaoyan10
  • 2016年04月19日 16:09
  • 359

基于双目立体视觉的自主导航车运行环境识别

  • 2011年04月21日 14:25
  • 10.24MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟自主运行的对象(live object)
举报原因:
原因补充:

(最多只允许输入30个字)