Use a thread, not a timer. Of course you don't present any information on what your target platform is, which makes it a bit difficult to offer much more advice than that.
General advice:
1. Don't use a timer.
2. Don't use a timer.
3. And most importantly- don't use a timer.
A GameProc() routine should run as fast as it possibly can, on a separate thread. It will grab a critical section/mutex, update game state, move objects, etc. Release the mutex/critical section. Each iteration it should post a message to the main thread (which, for most operating systems would be the one managing the UI) to tell it to repaint, Otherwise, the game loop is throttled by the delay the timer has, which for most systems is at least 53 or so milliseconds. The Paint Message handler (or equivalent) would then deal with grabbing a critical section on the various game objects as needed and drawing with them. Depending on the way the gameproc() messes with the gamestate variables sometimes you can shorten critical sections so that the painting thread can get a word in edgewise.