es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cuando imprimo desde un hilo, obtengo una salida extraña en C usando ncurses.

Este es mi hilo para el temporizador que uso:

void *timer(void *arg){

current = time(0);
stop = current + 30;
while (1){
    current = time (0);
    if (current <= stop){
        now=stop-current;
        mvprintw(0,0,"%d",now);
        refresh();
    }
}

return NULL;
}

Olvidé mencionar que estoy usando:

pthread_t timerth; pthread_create(&timerth, NULL, timer, NULL);  

Necesito imprimir el valor “timerleft”, pero la salida se ve así:

Imagen sin imprimir correctamente

¿Hay alguna forma de imprimirlo normalmente? ¿Me falta algo?

Gracias por la ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con la salida es que el valor impreso se está sobrescribiendo en la misma línea sin borrar el valor anterior. Esto resulta en que la salida aparezca desordenada.

    Para imprimir el valor normalmente, puede agregar un comando para borrar la línea antes de emitir el nuevo valor. También puede agregar un comando sleep para reducir el uso de la CPU mientras espera que expire el temporizador.

    Aquí hay una versión actualizada del código:

    void *timer(void *arg){
    
        current = time(0);
        stop = current + 30;
        while (current <= stop){
            now = stop - current;
            mvprintw(0, 0, "Tiempo restante: %d      ", now);
            refresh();
            sleep(1); // esperar por un segundo
            clear(); // borrar la línea
            current = time(0);
        }
        mvprintw(0, 0, "¡Se acabó el tiempo!      ");
        refresh();
    
        return NULL;
    }
    

    En esta versión, la línea se borra después de cada salida, y hay un retraso de 1 segundo entre cada salida. El mensaje final también se imprime cuando el temporizador expira.

    Tenga en cuenta que la función pthread_create no está presente en el código que proporcionó. Debe agregar esta función para crear el hilo del temporizador.

Comments are closed.