Programación General > Visual C++
Timers
Eternal Idol:
--- Cita de: "allisap" --- alguna idea de como acelerar el proceso?
--- Fin de la cita ---
El problema es el tiempo que tardas en procesar esos datos, limpiando la pantalla, escribiendo una nueva cadena previo formateo de la misma y comprobando que no haya niguna pulsacion de letra (eso supongo que sera redundante en tiempo en MS-DOS pero lo dudo en Windows).
¿Que pasa si sacas el cls? ¿Que pasa si no haces la comprobacion de tecla ahi?
Tendrias que hacer un hilo con el bucle original que tenias pero dedicado solo a recibir y poner en una cola esos datos y que otros hilo (o uno solo) se dedique a procesar estos datos, asi le darias tiempo a recibir.
--- Código: Text --- for (;;){ lectura=ResultadoPIC(); push(lectura);}
allisap:
ya revise lo de los timers y multimedia :) y la verdad no le entendi :unsure: no tendran un ejempplo de como implementarlos B)
Eternal Idol:
¿Hiciste las pruebas que te dije? No creo que sea ninguna solucion hacer eso, el problema esta en tu codigo y no en la capacidad de ejecutarlo cada X tiempo con una mayor resolucion ... por algo no te funcione ni con un bucle.
JuanK:
1-Haciendo incapie en lo mencionado por eternal idol, no te servira de nada lo del timer para agilizarlo como tu quieres.
2- lo de borrar pantalla e ir imprimiendo el resultado también es un gran problema deberias quitar eso.
3- si realmente es imprescindible mirar los resultados mi recomendación es que lo hagas al final de todo y que mientras solo mandes las variables a una pila que tu mismo implementes, y al final imprimir todo en un bucle, pero despues del bucle que llama al PIC.
4- Para agilizar el trabajo en la pila desde luego ya debes tener previamente reservado el espacio que utilizaras previendo el máximo que pueda llegar a tener o algo muy parecido a eso.
5- Declarar las variables por fuera del loop, con eso solo se declaran una vez y se reducira el numero de veces que intercambiaras areas de memoria reservando y liberando.
6- Interrelacionado con lo anterior, no usuaria la función int ResultadoPIC() y haria la implementación directamente en el código para evitar los excesivos cambios de contexto que pueden llegar a ser desgastantes debido a que los llamados se hacen X veces desde el loop.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->int lectura = 0;
BYTE receive_buf[2];
DWORD RecvLength = 2;
do
{
ReceivePacket(receive_buf, &RecvLength);
lectura=receive_buf[0]+receive_buf[1]*256;
//Lo de la pila seria asi y reemplazaria la linea anterior y la que hacia el printf.
//Push(receive_buf[0]+receive_buf[1]*256;);
}
while( !_kbhit() ); <!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
7-Finalmente, dependiendo de como devuelva los datos ReceivePacket, puede que llegues a necesitar usar un ZeroMemory aunque no creo.
xx- para que haces esto?
receive_buf[1]*256
estas seguro que eso es lo que quieres? :huh:
Eternal Idol:
--- Cita de: "JuanK" --- 6- Interrelacionado con lo anterior, no usuaria la función int ResultadoPIC() y haria la implementación directamente en el código para evitar los excesivos cambios de contexto que pueden llegar a ser desgastantes debido a que los llamados se hacen X veces desde el loop.
--- Fin de la cita ---
Solo a modo de aclaracion lo que se conoce comunmente como cambio de contexto sucede cuando se pasa de un proceso a otro.
Tu solucion iria bien pero me parece que el problema es diferente, no quiere obtener una lista de valores e imprimirlos sino mantener un valor actualizado (solo) en la pantalla. Al menos es lo que entendi yo, si fuera asi es mejor hacerlo con varios hilos encargados de cada tarea, siempre tendria un delay en la parte de output pero el input del PIC siempre llegaria a completarse. Si es que necesita obtener muchos valores y despues imprimirlos es mejor hacerlo como decis, obtenerlos todos en un bucle, almacenarlos y finalmente procesarlos.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa