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.

¿Por qué no puedo convertir estáticamente una Lambda en un puntero de función TIMEPROC en una función SetTimer?

He codificado esto varias veces.
Pero parece que ni siquiera funciona en una simple aplicación de consola hola mundo.
¿Es hWND el responsable, lambda o la conversión de lambda?

void sleeper()
{
Sleep(10000);
}
int main()
{
SetTimer
(GetConsoleWindow(), 1, 1000, [](HWND, UINT, UINT_PTR, DWORD)
{
printf("¡Hola mundo!");
}
);
sleeper();
return 0;
}

No me da advertencias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el fragmento de código proporcionado, es poco probable que el problema se deba a la conversión de la lambda o al uso del hWND. La causa más probable del problema es la función sleeper. La función Sleep pausa el hilo actual durante la cantidad especificada de tiempo, que en este caso es de 10 segundos (10000 milisegundos). Como resultado, la función SetTimer no se ejecuta hasta después de que la función sleeper ha finalizado, lo que anula el propósito de usar un temporizador en este escenario.

    Para resolver el problema, la función Sleep debería eliminarse o reemplazarse por una alternativa no bloqueante, como un bucle con un retraso o un hilo separado. Además, se recomienda verificar los valores de retorno de las funciones de la API de Win32 utilizadas (GetConsoleWindow y SetTimer) para asegurarse de que se ejecutan correctamente.

Comments are closed.