ну в принципе кое-какие мысли есть, допустим: есть массив uint32_t для сообщений messages[MSG_MAX] состоящее из двух битовых полей. первое поле это биты в котором приёмники отмечаются что больше они на это мессадж реагировать не будут.
второе поле - счетчик, который инкрементируется в прерывании таймера по условию что он уже не 0 и активен и значит его надо прибавлять. как только он досчитал до предела - принудительно в ноль его.
что здесь неудобно - что get_message должно принимать какой-то уникальный номер от приёмника чтобы выставить свой бит о получении...