¿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.
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ónSleep
pausa el hilo actual durante la cantidad especificada de tiempo, que en este caso es de 10 segundos (10000 milisegundos). Como resultado, la funciónSetTimer
no se ejecuta hasta después de que la funciónsleeper
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
ySetTimer
) para asegurarse de que se ejecutan correctamente.