Just nu i M3-nätverket
Gå till innehåll

Anrop med en viss frekvens


mrDred

Rekommendera Poster

Hej!

 

Jag har en funktion f() som jag vill anropa med en viss frekvens (ggr per sekund). Är det någon som har en idé över hur man kan få till ett sånt anrop? Jag funderar på någonting i stil med (strunta i syntaxen):

 

main()

{

do

{

f();

Sleep(x);

}

while(forever);

}

 

Är det ett bra sätt? och hur bör jag räkna fram x så att jag får en frekvens på y ggr/sek?

 

Tack på förhand!

/mrDred

Länk till kommentar
Dela på andra webbplatser

Ska du anropa andra funktioner också? Om du istället vill ha en flödande loop så borde du använda dig av något sätt för att avläsa den tid som paserat sedan det sista anropet. På så sätt låser du inte upp programmet och du kan anropa andra funktioner samtidigt som den anropar den funktion du vill varje x sekund.

 

--------

ie. (ej fungerande kod, förklarande)

--

main()

{

last=time(0);

while() /* main loop */

{

if (last-time(0)>x) { /* x seconds elapsed since last call */

f();

last=time(0);

}

usleep( y ); /* we don't wanna run low on systemresources, do we? */

}

}

--------

 

 

Annars skulle en sleep inuti en while loop även fungera, om programmet inte har någon annan funktion dvs.

 

 

Länk till kommentar
Dela på andra webbplatser

 

Egentligen vill jag göra så att jag initierar ett objekt med ett frekvensvärde och ska sedan kunna när som helst anropa en metod för objektet för att stoppa exekveringen:

 

myFreq=10;

FreqClass myFreqClass(myFreq);

Sleep(60*1000) //wait 1 minute

myFreqClass.stop();

 

När jag är inne i Sleep() så vill jag ju inte att loopen i myFreqClass ska stanna. Den ska fortsätta tills den får ett anrop till stop(). Förmodligen behöver jag köra med en tråd här eller?

 

Sen verkar själva frekvensberäkningen inne i FreqClass bara kunna göras genom att läsa av klockan hela tiden och räkna ut hur mycket man får sleep'a i loopen och på så sätt skapa en godtycklig frekvens. Är det så eller finns det andra sätt?

 

/mrDred

 

Länk till kommentar
Dela på andra webbplatser

Istället för en "pollad" lösning, kan man använda sig av timers eller interrupts. Hur man gör detta beror mycket på vilken plattform man är på. Är det Win32 är det relativt enkelt att använda timers.

/

 

[inlägget ändrat 2002-10-18 10:28:33 av Junk Junk]

Länk till kommentar
Dela på andra webbplatser

 

Jo, det är Win32 jag kör på. Har du något tips/mer info om hur jag går vidare med en timers/interrupts lösning? Vad är skillnaden mellan dessa två? Vilka funktioner använder jag mig av?

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...