Есть два способа сделать это:
Во-первых, как уже упоминалось в другом ответе, это сигналы, запускаемые с помощью alarm()
или setitimer()
. Обе функции доступны в любой ОС, которая придерживается POSIX; есть третья функция с именем ualarm()
, которая устарела в 2008 году. Недостатком является то, что небезопасно делать что-либо существенное (например, ввод / вывод или другие системные вызовы) в обработчике сигналов, поэтому на самом деле все, что вы хотите сделать, это, возможно, установите флаг и позвольте другому что-нибудь поднять.
Во-вторых, использовать поток, который спит в течение определенного интервала, а затем вызывает вашу функцию. POSIX стандартизировал потоки как расширение в начале 1990-х годов, и большинство современных ОС, поддерживающих потоки, поддерживают потоки POSIX. Подводный камень в том, что вы должны понимать последствия наличия двух контекстов выполнения в одном и том же пространстве данных и разрабатывать свою программу соответствующим образом, иначе вы столкнетесь с проблемами, которые могут стать кошмаром для отладки.
Имейте в виду, что тревоги и сны обещают делать то, что они делают только после по крайней мере указанного времени, поэтому вам не гарантируется, какую точность вы получите на реальном операционная система.