Just nu i M3-nätverket
Jump to content

Anrop med en viss frekvens


mrDred

Recommended Posts

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

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

 

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

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

 

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?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...