CAPL на процедуру sysvar_change с sysvar пользовательского типа данных struct - PullRequest
0 голосов
/ 06 ноября 2019

в соответствии с руководством,

Процедура в sysVar вызывается только при изменении значения переменной. Это также может быть написано как на sysVar_change. Если вы хотите получать уведомления об обновлениях значения переменной, которые не меняют значение, вы должны использовать вместо sysVar_update.

В моем примере сценария у меня есть системная переменная s::sysv изПользовательский тип данных Struct X, где X имеет два поля: A и B.

В моем CAPL-скрипте я поместил следующее:

on sysvar_change s::sysv.A
{
    // do stuff
} 

Ожидаемый выводделать вещи только тогда, когда s::sysv.A меняется. Однако, поскольку s::sysv.B часто обновляется во время выполнения симуляции, процедура on sysvar_change s::sysv.A вызывается намного чаще, чем я ожидаю, даже если A не меняет своего значения.

Iне понимаю почему, и я стараюсь обойти это, кто-нибудь может помочь?


Редактировать:

в соответствии сВ одном ответе обработчик события - это не элемент структуры, а переменная. Однако ключевое слово this теперь указывает на элемент структуры, а не на переменную.

Этот бит руководства также имеет значение:

Вы также можете реагировать ваналогичным образом оценивать изменения конкретных элементов системной переменной типа struct или generic array. Для этого добавьте элемент к имени переменной.

1 Ответ

0 голосов
/ 06 ноября 2019

Ваша переменная s::sysv. Обработчик события вызывается всякий раз, когда изменяется значение переменной. Независимо от того, изменяется A или B.

Нет способа ограничить его только определенными изменениями значения.

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

Мне кажется, лучше пересмотреть вашу настройку и спросить себя, является ли использование структуры правильным подходом или может быть лучшеиспользуйте две отдельные системные переменные A и B.

...