Have you tried TimeCallback class? AFAIK it doesn't -directly- need a Ctrl (But it calls Upp::SetTimeCallback() too. Still, It may affect the behaviour -crash- differently ).
On console I haven't used it. But you can use a) a thread, or b) waitForSingleObject on Windows, and timer functions on posix. (Or you can emulate timer using sigtimedwait, creating a custom signal, or even using select call with a socket.)