31. oktober 2000 - 21:47Der er
6 kommentarer og 2 løsninger
Hvordan indsættes et delay i et program ?
Jeg skal lave et C++ program der checker status\'en på nogle digitale input på et I/O kort.
Men hvis computeren nu står med en simpelt loop fx.
do { if( InputBen1 = true ) { enEllerAndenFunktion( void ) } } while 1 > 0
Så bruger maskinen jo 100% af sin energi på at checke om det skide input er sandt. Kan man ikke lave et delay så hver gang den har checket inputet\'s værdi så skal programmet fx. vente 1/10 sekund ??
Umiddelbart ville jeg skrive at du skulle implementere en delay() fra <dos.h>, men det virker sikkert ikke da det er hardware der programmeres og det ikke er pæn Ansi C++.
Dog ville jeg give dig det forslag at skrive din egen delay >> f.eks
Det vil være dumt at tro, at du skal implementere din egen delay funktion. Sleep er lavet netop til det formål, så bare benyt den.
Sleep(int i) laver en pause i millisekunder på Windows.
sleep(int i) laver en pause i sekunder, og virker både i Windows og Linux.
usleep(int i) laver en pause i mikrosekunder, og virker kun i Linux.
Fælles for alle disse funktioner er, at de ikke bruger processortid i den tid de sleep\'er. Du skal være lidt hård for selv at lave en delay-funktion, som gør det samme, så det giver vi ikke engang diskutere. jackoblinux\'s metode bruger processortid når den kører.
At implementere EnEllerAndenFunktion i en tråd, vil ikke spare noget som helst. Det vil betyde, at andre tråde vil kunne eksekvere samtidig, så EnEllerAndenFunktion vil ikke få hele cpu-en for sig selv, men den vil stadig bruge fuld cpu-tid på at eksekvere.
Hvis du laver multitrådet programmer, så skal du i hvert fald ALDRIG benytte dig af en eller anden løkkestruktur, til at lave en pause i en af dine tråde. Den vil nemlig eksekvere pause-løkke-koden, og derved tage tid fra de andre tråde, som jo vel skal køre videre!
Multithreaded programmer er en meget stor gevinst i mange tilfælde, men pas på! Det kan være lidt svært at håndtere når man ikke er vant til at tænke i flere tråde. Alt hvad du tilgår fra flere tråde, skal mutex-beskyttes, ellers vil du opleve nogle \"sjove\" fejl.
Sleep fungerer fint med tråde også. Det er så kun den tråd der rammer en sleep-komando, som rent faktisk sleeper.
Exit(0) fungerer fint til at komme hurtigt ud af sint program.
Hent tiden fra din PC. \"hentet tid\" Læg dit delay til. \"delay\" Kør med mellemrum testen: \"nutid\" >= \"hentet tid\" + delay\"
For optimal udnyttelse læs i hjælp-filen under \"time\"
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.