Avatar billede Swift Praktikant
31. oktober 2000 - 21:47 Der 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 ??
Avatar billede borrisholt Novice
31. oktober 2000 - 21:48 #1
BRUG sLEEP()

jENS b
Avatar billede borrisholt Novice
31. oktober 2000 - 21:49 #2
Ellers implemter din enEllerAndenFunktion() i en tråd ...

Jens b
Avatar billede jackonlinux Nybegynder
01. november 2000 - 07:18 #3
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

int delay()
{
long count,var;

for(count=0;count<var;count++);

return(0);
}

Håber du kan bruge dette.

-jackonlinux
Avatar billede dmk Nybegynder
01. november 2000 - 10:04 #4
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.

Venligst,
DMK
Avatar billede Swift Praktikant
01. november 2000 - 14:58 #5
DMK:
Det lyder tigtig smart !

Men hvad er det med en tråd ??
Kan man lave en slags \"multitasking\" ?

Jeg har et andet program hvor et tryk på en NØDSTOP skal stoppe programmet så HURGIGT som muligt...??
Avatar billede lens Nybegynder
21. november 2000 - 22:48 #6
Tråde, er når der gøres flere ting på en gang (multithreading). Det er ret komplekst. Jeg ville bruge sleep(int);



Hvad med: exit(0);  :-)
Avatar billede dmk Nybegynder
22. november 2000 - 19:05 #7
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.

DMK
Avatar billede mads_97 Nybegynder
24. november 2000 - 13:52 #8
Du kan altid benytte dig af funktionen \"time\".

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\"
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester