Есть много способов сделать таймер. Это не сложно, но нужно думать именно то, что вы хотите. Если вы хотите вызвать обратный вызов, вы обычно используете поток, который спит, пока не истечет ваша задержка, перед вызовом обратного вызова. Если вы не хотите использовать поток, вы можете периодически вызывать функцию проверки, которая вычисляет дельту времени.
Ваш API будет функцией, принимающей задержку и указатель функции плюс параметры обратного вызова. Он запустит поток, который будет находиться в режиме ожидания для задержки, а затем вызовет обратный вызов с заданными параметрами.
Проверьте библиотеки общего назначения, они обычно имеют встроенные таймеры (gtk + glib, boost :: timer, я думаю).
my2c
Edit:
Что касается переносимости, вам, конечно, нужно написать две версии функции таймера. Если вы используете thread, это означает, что лучше использовать lib. Поскольку библиотеки дают вам таймеры ... Используйте lib:)