当前位置:  开发笔记 > 编程语言 > 正文

事件驱动的模拟类

如何解决《事件驱动的模拟类》经验,为你挑选了1个好方法。

我正在完成Bjarne Stroustrup的C++编程语言中的一些练习.我对第12章末尾的问题11感到困惑:

(*5)设计并实现用于编写事件驱动模拟的库.提示:....类任务的对象应该能够保存其状态并恢复该状态,以便它可以作为协程运行.可以将特定任务定义为从任务派生的类的对象.由任务执行的程序可以被定义为虚拟功能.......应该有一个实现虚拟时间概念的调度程序.......任务需要沟通.为此设计一个类队列....

我不确定这究竟是什么要求.任务是一个单独的线程吗?(据我所知,没有系统调用就不可能创建新的线程,因为这是一本关于C++的书,我不相信这是意图.)没有中断,如何启动和停止运行功能?我假设这将涉及忙等待(也就是说,连续循环并检查条件),虽然我看不出如何将其应用于可能不会终止一段时间的函数(例如,如果它包含无限循环) .

编辑:请参阅下面的帖子了解更多信息.



1> Scottie T..:

以下是我对"事件驱动模拟"的理解:

控制器处理事件队列,调度在特定时间发生的事件,然后在队列上执行top事件.

活动在预定时间瞬间完成.例如,"移动"事件将更新模拟中实体的位置和状态,使得状态向量在当前模拟时间有效."感知"事件必须确保所有实体的状态都在当前时间,然后使用一些数学模型来评估当前实体能够感知其他实体的程度.(想想机器人在板上四处走动.)

因此,时间不连续,从事件跳到事件.将其与时间驱动的模拟进行对比,其中时间以离散步骤移动,并且每个时间步骤更新所有实体的状态(大多数Simulink模型).

然后事件可以以其自然速率发生.在模拟中以最精确的速率重新计算所有数据通常没有意义.

大多数生产事件驱动的模拟都在一个线程中运行.它们本质上可能很复杂,因此尝试同步多线程模拟往往会增加指数层的复杂性.话虽如此,有一个称为分布交互式仿真(DIS)的多进程军事模拟标准,它使用预定义的TCP消息在进程之间传输数据.

编辑:定义建模和模拟之间的差异非常重要.模型是系统或过程的数学表示.模拟是根据一段时间内执行的一个或多个模型构建的.同样,事件驱动的模拟在事件之间跳跃,而时间驱动的模拟在恒定的时间步骤进行.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有