Удаление сообщения после использования для него функции senddirect() в omnetpp

В моем проекте у меня есть следующий фрагмент кода

if(strcmp(msg->getName(),"failedAck") == 0 || ......)
{
    msg->removeControlInfo();
    msg->setControlInfo(info);
    recvControls++;
    sendDirect(msg, table, "ackIn");
}

По сути, сообщение достигает своего конечного пункта назначения (давайте назовем его A*), и если это тип указанных сообщений, оно отправляется другому модулю (B*), который использует информацию, которую он несет, для выполнения операции.

Проблема, с которой я сталкиваюсь, заключается в том, что после отправки сообщения другому B * я удаляю сообщение после того, как закончу его использовать. Однако он по-прежнему отображается как часть A *, когда я смотрю в инспекторе. И когда я пытаюсь удалить сообщение в A *, я получаю сообщение об ошибке, в котором говорится, что сообщение не может быть удалено, потому что оно в настоящее время запланировано. Я не могу понять, почему это происходит. Значит ли это, что sendDirect() не меняет владельца сообщения (вопреки руководству)?

Помощь в этом вопросе будет очень признательна, в настоящее время я занимаюсь проблемами управления памятью в моей симуляции, и это является ее частью.


person luckyseven    schedule 22.02.2017    source источник
comment
Вы уверены, что видите такое же сообщение в инспекторе? Не могли бы вы показать код, где вы удаляете его после использования? Является ли table указателем на другой модуль?   -  person Jerzy D.    schedule 23.02.2017
comment
Не могли бы вы уточнить, где вы удаляете сообщение в A *?   -  person Michael Kirsche    schedule 23.02.2017
comment
Вы уверены, что удаляете одно и то же сообщение? Вы получаете сообщение об ошибке, что сообщение запланировано, потому что оно находится в FES.   -  person pys    schedule 23.02.2017
comment
Таблица @JerzyD является указателем на другой модуль, вам необходимо указать это при использовании senddirect(). И я уверен, что это один и тот же объект, это не может быть что-то другое, обычно, когда вы отправляете сообщение, оно меняет владельца, и вы не увидите его под объектом в инспекторе.   -  person luckyseven    schedule 23.02.2017
comment
@Michael Я удаляю сообщение только в B * (используя delete (msg). Я больше ничего не делаю, например, передаю его другому модулю или сохраняю), потому что это конечный пункт назначения сообщения, это не имеет смысла удалить сообщение перед отправкой (очевидно), и когда я пытаюсь удалить его после отправки, это дает мне ошибку.   -  person luckyseven    schedule 23.02.2017
comment
На самом деле не уверен, не глядя на исходный код. Обычно вызывается handleMessage, создается или передается новый пакет из сообщения, которое было передано в handleMessage, и это новое сообщение передается через sendDirect на другой узел/модуль. Когда только что созданный пакет прибыл в конечный пункт назначения, он снова (обычно) преобразуется, проверяется и удаляется, если он больше не нужен. Если это то, что вы делаете, я не знаю, почему либо пакет все еще запланирован (может быть, вы не создали новый пакет для отправки через sendDirect?), либо почему пакеты все еще остаются.   -  person Michael Kirsche    schedule 24.02.2017


Ответы (1)


Я хотел бы снять этот вопрос и сказать спасибо всем, кто посмотрел на него. Я только недавно обнаружил, что элементы были удалены, когда они должны были быть. однако я забыл, что делал клон объекта для других целей, поэтому он отображался в инспекторе. Мои извинения.

person luckyseven    schedule 30.03.2017