#c #windows #timer #mingw
#c #Windows #таймер #mingw
Вопрос:
Я хочу установить таймер. По истечении времени он должен вызвать функцию обратного вызова. Но время указано в микросекундах. Я нахожу мультимедийные таймеры в Windows, но я использую компилятор mingw в Windows. Итак, есть ли какой-либо метод, использующий компилятор mingw в Windows.
Я пытался использовать https://learn.microsoft.com/en-us/windows/win32/sync/using-timer-queues
Но у меня ошибка: «CreateTimerQueue() не был объявлен в этой области» Как мне это решить?
#include <windows.h>
#include <stdio.h>
HANDLE gDoneEvent;
VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{
if (lpParam == NULL)
{
printf("TimerRoutine lpParam is NULLn");
}
else
{
// lpParam points to the argument; in this case it is an int
printf("Timer routine called. Parameter is %d.n",
*(int*)lpParam);
if(TimerOrWaitFired)
{
printf("The wait timed out.n");
}
else
{
printf("The wait event was signaled.n");
}
}
SetEvent(gDoneEvent);
}
int main()
{
HANDLE hTimer = NULL;
HANDLE hTimerQueue = NULL;
int arg = 123;
// Use an event object to track the TimerRoutine execution
gDoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (NULL == gDoneEvent)
{
printf("CreateEvent failed (%d)n", GetLastError());
return 1;
}
// Create the timer queue.
hTimerQueue = CreateTimerQueue();
if (NULL == hTimerQueue)
{
printf("CreateTimerQueue failed (%d)n", GetLastError());
return 2;
}
}
Комментарии:
1. Есть ли у вас доступ к WinAPI в mingw? Если вы это сделаете,
SetWaitableTimer
может быть полезно.2. На самом деле да, но когда я использую функцию CreateTimerQueue(), появляется ошибка «CreateTimerQueue() не был объявлен в этой области», хотя я включаю файл <windows.h> . У вас есть идея, почему возникает эта ошибка? @TedLyngmo
3. Вы включили
threadpoollegacyapiset.h
? Можете ли вы заставить работать один таймер (CreateWaitableTimer
)?4. Также есть такая же ошибка: ‘threadpoollegacyapiset. h Нет такого файла или каталога ‘. Есть ли какой-либо макрос, чтобы добавить мой код для использования WinAPI с Mingw? Я погуглил, но не смог найти ответ. @TedLyngmo
5. Можете ли вы заставить работать один таймер (а не пул таймеров)? В любом случае, если вам не хватает файлов заголовков в вашей среде разработки, это будет громоздко.