常问why
仿真核心维持了一个事件列表,这个事件列表是动态收缩的。
- 我们写
processor
或者queue
进程的时候,经常都得设置接口属性begsim intrpt
enabled。 - 开始中断会在时刻
0.0
发生。因为很多进程都会设置开始中断,所以多个开始中断会同时发生。 - 在同一个时刻有多个事件在事件列表的时候,仿真核心有两种处理方式:
- 自然顺序。尽管事件事件是在一个时刻,但是在事件列表中的排列还是有先后顺序。
- 设置优先级。接口属性里还有一个优先级可以设置。
- 仿真开始后,执行事件列表。事件列表中维持的基本信息有事件的发生时刻、事件类型、事件的触发模块、事件的接收模块。所以事件发生时,是由仿真核心定向的将中断传递给指定的模块,而不是一种广播机制。
- 事件执行时,仿真时间不推进。这一点很重要。比如多个开始中断都在0.0时刻发生,逝去时间可能过去了一些,但是仿真时间仍为
0.0
,这样就不会打乱事件先后的逻辑顺序。 - 事件列表是动态收缩的。一开始只有开始中断,随着进程的执行,事件列表会动态增删。
- 仿真结束有四种情形:
- 外因
- 仿真时间结束
- 内因
- 事件列表空了
- 进程中执行了KP
op_sim_end()
- 致命的错误
- 外因
tags:opnet