我正在使用以下方式安排omnet ++中节点的事件列表:
scheduleAt(simTime().dbl() + slotTime, msg)
在单个模块的未来事件列表中可能有多个此类计划。
现在,在给定的时刻,我想取消节点的所有未来预定事件,这就是我需要所有未来事件列表的原因。
据我所知,cancelEvent(msg)
只取消一项活动。如何查找列表并删除所有事件。请帮忙。
答案 0 :(得分:2)
要访问所有以后的活动列表,可以使用getMessageQueue()
。并且要仅删除自己的事件(即自我消息),必须使用isSelfMessage()
检查该列表中的每个事件。示例代码,用于删除未来事件集中的所有自我消息:
cMessageHeap& heap = cSimulation::getActiveSimulation()->getMessageQueue();
cMessageHeap::Iterator it(heap);
do {
cMessage * event = it();
if (event && event->isSelfMessage()) {
cancelAndDelete(event);
it.init(heap);
} else {
it++;
}
} while (!it.end());