Ответом на это будет инициирование событий непосредственно механизмом, влияющим на условия, которые вы отслеживаете. Поэтому вместо проверки «постоянного» состояния убедитесь, что при каждом изменении условия вы запускаете проверку. Если это невозможно, потому что слишком много влияющих факторов или оно постоянно меняется, рассмотрите циклическую проверку c с дискретными временными шагами с подходящим вам интервалом. Даже это будет гораздо более эффективным (в зависимости от выбранного вами интервала проверки времени), чем текущий непрерывный мониторинг.
Пример того, как выполнять мониторинг триггера событий вместо непрерывного мониторинга:
В вашей главной записи добавьте глобальную переменную-счетчик типа int (здесь: nrAgentsState1) и создайте функцию для обновления этой переменной (здесь: updateStateCounter). Также в функции: проверка, которая запускает функцию при достижении вашей границы.
При переходе в состояние, которое вы хотите отслеживать (здесь: состояние1), вызовите функция в main, которая обновляет глобальный счетчик. Для перехода, выходящего из отслеживаемого состояния, добавьте то же действие, но с параметром -1 .