【发布时间】:2016-06-21 07:12:25
【问题描述】:
我一直在尝试开发一个简单的事件驱动模拟器并从这里开始
http://stdcxx.apache.org/doc/stdlibug/11-3.html
当我对示例进行一些修改时,我遇到了一种情况,即当两个事件(到达、离开)同时发生(比如在时间单元 5)时,模拟器只会弹出任何内容从下面的代码 sn-p 可以看出,事件队列的顶部。
void simulation::run () {
while (! eventQueue.empty ()) {
event * nextEvent = eventQueue.top ();
eventQueue.pop ();
time = nextEvent->time;
nextEvent->processEvent ();
delete nextEvent;
}
}
如果两个事件同时发生,我该如何强制在出发事件之前总是弹出某个事件(到达事件优先)的条件。
非常感谢任何帮助。
【问题讨论】:
-
如果您想要可重复的模拟,“时间”是事件的顺序。没有两个事件同时发生。
-
好的,我接受你的观点。但是我仍然有一个问题,如果两个事件具有相同的时间会发生什么?我们能否确定性地说哪个事件将首先发生?通过其余的模拟。谢谢
-
如果两个事件同时发生,这是一个错误。它不应该发生在正常运行的系统中。修好就好了。
-
考虑这样一种情况,根据一些随机过程,许多数据包进入系统并离开系统。在这种情况下,第 (n+1) 个数据包到达事件可以与第 n 个数据包离开事件具有相同的时间。所以我无法接受这是一个错误。系统可以具有这样的属性。而且我相信事件驱动的模拟可以处理这种情况。
-
使用 priority_queue - 按 2 个因素排序 - 从更重要的:1) 时间 2) 事件类型。就是这样。
标签: c++ event-driven event-driven-design