que evitar ejecutar dev consola compilar compilador cierre c++ windows console

c++ - evitar - g++ windows



¿Cómo puedo sobrescribir la misma porción de la consola en una aplicación de consola C++ nativa de Windows, sin usar una biblioteca de terceros? (5)

En Linux, puede lograr esto imprimiendo / b y / o / r en stderr. Es posible que deba experimentar para encontrar la combinación correcta de cosas en Windows.

Tengo una aplicación de consola que necesita mostrar el estado de los elementos, pero en lugar de tener que desplazar el texto como loco, preferiría que el estado actual siga apareciendo en las mismas líneas. Por el bien del ejemplo:

Running... nn% complete
Buffer size: bbbb bytes

debería ser el resultado, donde ''nn'' es el porcentaje actual completo, y ''bbbb'' es un tamaño de búfer, actualizado periódicamente en las mismas líneas de la consola.

El primer enfoque que tomé simplemente imprimió la cantidad correcta de espacios de respaldo en la consola antes de imprimir el nuevo estado, pero esto tiene un desagradable parpadeo del que quiero deshacerme. También deseo atenerme a la biblioteca estándar o a la funcionalidad proporcionada por MS (VC 8) para no introducir otra dependencia para esta simple necesidad.



Joseph, JP y CodingTheWheel proporcionaron una valiosa ayuda.

Para mi caso simple, el enfoque más directo parecía estar basado en la respuesta de CodingTheWheel :

// before entering update loop HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO bufferInfo; GetConsoleScreenBufferInfo(h, &bufferInfo); // update loop while (updating) { // reset the cursor position to where it was each time SetConsoleCursorPosition(h, bufferInfo.dwCursorPosition); //... // insert combinations of sprintf, printf, etc. here //... }

Para problemas más complicados, la API de la consola completa proporcionada por la respuesta de JP , en coordinación con los ejemplos proporcionados a través del enlace de la respuesta de Joseph puede resultar útil, pero el trabajo necesario para utilizar CHAR_INFO demasiado tedioso para una aplicación tan simple.



Si imprime usando / r y no usa una función que generará una nueva línea o agregará / n al final, el cursor volverá al principio de la línea y simplemente imprimirá el próximo elemento que coloque. Generar la cadena completa antes de imprimir también podría reducir el parpadeo.

ACTUALIZACIÓN : la pregunta ha cambiado a 2 líneas de salida en lugar de 1, lo que hace que mi respuesta ya no se complete. Es probable que sea necesario un enfoque más complicado. JP tiene la idea correcta con la API de consola . Creo que el siguiente sitio detalla muchas de las cosas que necesitará para lograr su objetivo. El sitio también menciona que la clave para reducir el parpadeo es dejar todo fuera de la pantalla antes de mostrarlo. Esto es cierto cada vez que muestra algo en la pantalla, ya sea texto o gráficos (2D o 3D).

http://www.benryves.com/tutorials/?t=winconsole