Hola
Para mi que el problema sera seguramente de los bucles, ya que en visual c++ al tratarse de programacion orientada a objetos que interactuan con mensajes, se necesita de un proceso que actualice la aplicacion cada x tiempo
Te voy a decir otra forma mucho mejor de hacer el contador que pretendes
primero tienes que crear un metodo OnTimer en la aplicacion( que supongo sera un dialogo). Para ello te vas al class wizard (ctrl +w) y en la pestaña de metodos y seleccionando la clase de dialogo , escoges en la lista el metodo ontimer.
seguidamente hay que iniciar el timer, para ello supongo un boton que al presionar empieza el timer:
void CContarDlg::OnContar()
{
SetTimer(1,50,NULL); // Esta es la funcion que inicia el timer, tiene 3 parametros
// el primero es un entero para identificar el timer, si
// tuvieras x timers tendrias que poner 1..... hasta x
// identificadores distintos.El segundo parametro es el
// tiempo en milisegundos que tarda en actualizarse el
// timer, si quieres cada 1 seg pones 1000.El último
// argumento es un indicador de la funcion que se
// va a ejecutar cada vez que se recibe el mensaje de
// temporizacion , si pones NULL se pasa un mensaje a
// la aplicacion que ha hecho la llamada a SetTimer
}
Por ultimo hay que implementar la funcion OnTimer que es la que dice lo que hay que hacer cada vez que cambia el timer (es decir cada vez que pasan 50 ms en este caso). En tu caso seria importante ver cual el tiempo de refersco del timer optimo para que no te pase por ejemplo de un 15% a un 20% o que vaya tan rapido que relentice la aplicacion, pero eso ya lo veras segun tarde el programa en ordenar los elementos, divides entre 100 y mas o menos obtienes una fecuencia optima para el timer
void CContarDlg::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent); // codigo que crea el visual c++
CString numero; // creamos una variable cstring
static int tiempo=0; // y una variable static int para el contador
tiempo=(tiempo+1)%101; // incrementamos el contador, lo del
// modulo es por si no quieres que pase
// de un cierto numero , en este caso 101
numero.Format("%d",tiempo); // convertimos tiempo que es int
// en un CString mediante format
m_contador=numero; // pasamos el numero en forma de CString
// a la variable de la caja de texto
UpdateData(false); // actualizamos la caja de texto
if(m_contador=="100")KillTimer(1); //Por ultimo si quieres que el
// contador se pare puedes usar
// la funcion KillTimer indicando
// el identificador 1 en este caso
// del timer iniciado en OnContar
}
Esto es todo, espero que te sirva de ayuda.Un saludo
Aqui te adjunto el ejecutable para que veas como funciona