Mira, nos e si te servira pero te comento lo que hice yo en un proyecto de hace unos años.
El objetivo era controlar el giro de un motor de corriente continua desde el pc (en 1 instancia) y despues desde un microcontrolador.
Cuando lo hice desde el pc, yo programaba en Borland C++ Builder 1.6 (creo recordar). El intermedario con el proceso era una tarjeta de adquisicion de datos PCI9118Lab. La salida del pc era digital, dicha señal le llegaba a un par de PALs, de ahi a un puente H para amplificar la intensidad y hacerla continua, luego llegaba el motor. Dicho motor tenia un disco pintado en codigo gray que afectaba a un sensor optico, el sensor daba un tren de pulsos que luego eran transformados a continua mediante un conversor frecuencia-tension y eso era lo que acababa por entrar al pc, en formato analogica.
Para el manejo del proceso yo cree un modulo especial donde solo habia un timer y el decia que se tenia que hacer en cada momento.
En principio tambien lo queria hacer en tiempo real como tu, y me tope con los problemas que ya te han descrito, asi que lo que hice fue "disimularlo" de la siguiente manera.
Despues de saber cuanto tiempo necesitaba para realizar una de las "tareas minimas" lo que hice fue redondear hacia arriba el tiempo y ese valor se lo puse a un timer. Luego lo que hacia era:
Periodo 1: escribo salida, leo entrada, guardo datos
Periodo 2: realizo calculos, escribo salida, leo entrada
Periodo 3: guardo datos, escribo salida, leo entrada
Periodo 4: actualizo variables, escribo salida, leo entrada
Periodo 5: actualizo todas las vistas, tomo los nuevos valores de control (usuario)
Con esto logre "disimular" las tomas de control del windows y disminuir al maximo el desfase entre tiempo real y tiempo de periodo de control. Ya que, al tomar los 5 periodos pero tener 4 valores de datos, realizaba la media de esos 4 valores y "extrapolaba" que si 4 tomas de datos tenian un valor de X, 5 tomas tendrian X con un margen de error de Y%, cuando logre que el Y% fuera menor a 5% el profesor me lo tomo por valido y pude entregar.
Lamento no poder ser mas exacto, esto fue hace mas de 3 años (como puedes observar por la version de BC++ que use), pero espero que al menos te pueda servir para algo.