Используйте параметр timeout - храните события таймера в очереди с приоритетами, проверяйте верхний элемент и соответственно устанавливайте время ожидания - если время ожидания истекло, вы можете проверить, что событие готово к запуску, запустить событие и продолжить .
По крайней мере, так я и делаю.
Обратите внимание, что опрос имеет более приятный интерфейс (в некоторых отношениях) и может быть более эффективным с большим количеством файловых дескрипторов.