Поскольку истечение срока действия данных является асинхронным событием, вам необходимо использовать асинхронный таймер. Поскольку вы используете boost, вы можете заглянуть в Boost.Asio, который предоставляет вам deadline_timer
объекты, которые можно использовать вместе с обработчиками обратного вызова. (См. здесь для получения дополнительной информации.) Обработчик обратного вызова будет вызван по истечении таймера, что позволит вам проверить достоверность ваших данных.
Редактировать: Ааа ... Я только что заметил, что вы застряли с Boost 1.33.1, в котором нет Asio. Что ж, если вам разрешено использовать другие библиотеки, вы можете использовать не-версию Boost Asio, иначе вам придется полагаться на специфичные для ОС методы для реализации асинхронных таймеров. Вы не указываете свою ОС, но в POSIX-совместимых системах вы можете использовать select / poll для тайм-аутов.
На самом деле вы также можете использовать фоновый поток, который спит до истечения срока действия следующего фрагмента данных, затем просыпается и проверяет состояние всех данных и возвращается в спящий режим до истечения срока действия следующего фрагмента данных. Вам просто нужно быть осторожным, чтобы правильно синхронизировать все, чтобы избежать условий гонки.