Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet beskriver hur du skapar, identifierar, anger och tar bort timers. Ett program använder en timer för att schemalägga en händelse för ett fönster efter att en angiven tid har förflutit. Varje gång det angivna intervallet (eller tidsgränsvärdet) för en timer förflutit meddelar systemet det fönster som är associerat med timern. Eftersom en timers noggrannhet beror på systemets klockfrekvens och hur ofta programmet hämtar meddelanden från meddelandekön är tidsgränsvärdet endast ungefärligt.
Det här avsnittet innehåller följande delar.
Timeråtgärder
Program skapar timers med hjälp av funktionen SetTimer. En ny timer börjar schemalägga intervallet så snart det har skapats. Ett program kan ändra timerns timeout-värde med hjälp av SetTimer- och kan förstöra en timer med hjälp av funktionen KillTimer. Om du vill använda systemresurser effektivt bör program förstöra timers som inte längre behövs.
Varje timer har en unik identifierare. När du skapar en timer kan ett program antingen ange en identifierare eller låta systemet skapa ett unikt värde. Den första parametern för ett WM_TIMER meddelande innehåller identifieraren för den timer som publicerade meddelandet.
Om du anger ett fönsterhandtag i anropet till SetTimerassocierar programmet timern med det fönstret. När tidsgränsvärdet för timern förflutit skickar systemet ett WM_TIMER meddelande till fönstret som är associerat med timern. Om inget fönsterhandtag anges i anropet till SetTimermåste det program som skapade timern övervaka meddelandekön för WM_TIMER meddelanden och skicka dem till lämpligt fönster.
Not
Om du anger den valfria callbackfunktionen TIMERPROC anropas funktionen i Message Loop och WM_TIMER skickas inte till callbacken WNDPROC.
Om du behöver få ett meddelande när en timer förflutit använder du en väntetidstimer. Mer information finns i Väntbara tidsobjekt.
Högupplösningstimer
En räknare är en allmän term som används i programmering för att referera till en inkrementell variabel. Vissa system inkluderar en högupplöst prestandaräknare som ger tidsintervall med hög upplösning.
Om det finns en prestandaräknare med hög upplösning i systemet kan du använda funktionen QueryPerformanceFrequency för att uttrycka frekvensen i antal per sekund. Värdet för antalet är processorberoende. På vissa processorer kan till exempel antalet vara processorklockans cykelhastighet.
Funktionen QueryPerformanceCounter hämtar det aktuella värdet för prestandaräknaren med hög upplösning. Genom att anropa den här funktionen i början och slutet av ett kodavsnitt använder ett program i princip räknaren som en högupplöst timer. Anta till exempel att QueryPerformanceFrequency anger att frekvensen för prestandaräknaren med hög upplösning är 50 000 antal per sekund. Om programmet anropar QueryPerformanceCounter omedelbart före och omedelbart efter det avsnitt av koden som ska tidsmätas, kan räknarvärdena vara 1 500 respektive 3 500. Dessa värden anger att .04 sekunder (2 000 antal) förflutit medan koden kördes.
Väntebara tidsinställda objekt
Ett väntebart tidsinställt objekt är ett synkroniseringsobjekt vars tillstånd är inställt på signal när den angivna förfallotiden kommer. Det finns två typer av väntetidstimers som kan skapas: manuell återställning och synkronisering. En timer av båda typerna kan också vara en periodisk timer.
En tråd använder funktionen CreateWaitableTimer eller CreateWaitableTimerEx för att skapa ett tidsinställt objekt. Den skapande tråden anger om timern är en timer för manuell återställning eller en synkroniseringstimer. Den skapande tråden kan ange ett namn för det tidsinställda objektet. Trådar i andra processer kan öppna ett handtag till en befintlig timer genom att ange dess namn i ett anrop till funktionen OpenWaitableTimer. Alla trådar med ett handtag till ett timerobjekt kan använda en av väntfunktionerna för att vänta tills timertillståndet har angetts till signalerat.
Mer information om hur du använder väntebara tidsinställda objekt för trådsynkronisering finns i Väntebara timerobjekt.