🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #15943

Re: oneindige lussen in C++

#15943
From: Datalore
Date: Sun, 23 Jul 2000 00:00
94 lines
3624 bytes
Gewoon door de 'break' statement te gebruiken.

do {
  // ....blah...blah...blah... uw code
  if(conditie) break;
} while(true);

Eventjes een opmerking, een oneindige lus is een zeer slechte werkwijze om
algemeen te gebruiken. Deze lussen zorgen voor een hoge processor belasting,
zelfs in Windows of Linux. Als je een clock programmeert die tot de seconden
nauwkeurig is, zou je gebruik moeten maken van een 'sleep' statement in de
lus. Sleep veroorzaakt normaal gezien geen processor belasting. Als je
natuurlijk in een single-task omgeving werkt maakt dit allemaal geen bal uit
(toch niet voor mij).

vb met sleep:
time systeemtijd;
cout << "De systeemtijd is: ";
do{
 gettime(& systeemtijd);
 gotoxy(20,1);
 cout << int(systeemtijd.ti_hour) << ":"
        << int(systeemtijd.ti_min)  << ":"
        << int(systeemtijd.ti_sec);
  sleep(1000);
}while(1);

Let wel, deze code is zeker nog niet in orde, want sleep kan een kleine
afwijking hebben, waardoor je clock misschien eens een seconde kan
overslagen (= niet laat zien). Anyway, ik ga hier niet voor jou programmeren
:)

Wat betreft het uilezen van het keyboard zonder dat het programma daar
stopt, weet ik een makkelijke methode. Deze gebruikt C libs ipv de C++ cin
lib. Ik heb slechte ervaringen met cin qua gebruiksgemak voor de programmeur
en ben eigenlijk grote voorstander van de C libs :) Hehe... niet altijd
natuurlijk.... Het grote voordeel is dat je nog steeds cin kan gebruiken in
je programma waar het nodig is. Hier dan een stukje code om een toetsaanslag
te detecteren:

#include <conio.h>
time systeemtijd;
cout << "De systeemtijd is: ";
do{
 gettime(& systeemtijd);
 gotoxy(20,1);
 cout << int(systeemtijd.ti_hour) << ":"
        << int(systeemtijd.ti_min)  << ":"
        << int(systeemtijd.ti_sec);
  if(kbhit())
  {
    char test;
    cout << "Keyboard hit !" << endl;
    test = getch();
  }
  sleep(1000);
}while(1);

Vergeet niet conio.h te includen :)

mvg
Datalore

"Jan" <jan.bastiaens@vt4.net> wrote in message
news:39799d7e$0$12145@bru5-newsr2.be.uu.net...
> hey,
>
> Kan iemand mij vertellen hoe je oneindige lussen in C++ kan onderbreken.
> Bevoorbeeld volgend programma'tje:
>
>    time systeemtijd;
>    cout << "De systeemtijd is: ";
>    do{
>     gettime(& systeemtijd);
>     gotoxy(20,1);
>     cout << int(systeemtijd.ti_hour) << ":"
>            << int(systeemtijd.ti_min)  << ":"
>            << int(systeemtijd.ti_sec);
>    }while(1);
>
> Dit is wel leuk om de systeemtijd op het scherm te toveren, maar als ik
dit
> nu wil uitbreiden, zodat ik dit kan afsluiten door een druk op
> de 's'-toets, kom ik altijd in de problemen omdat cin en getch() het
> programma stil leggen en wachten op invoer, wat hier niet de bedoeling is.
> Ik heb al in help gezocht achter interrupt-routines, maar daar word ik
niet
> veel wijzer van.
>
> Als iemand mij kan helpen...
>
>
>
>
Technical Details
Message-ID: <JgAe5.139053$Ji7.2493918@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <39799d7e$0$12145@bru5-newsr2.be.uu.net>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,38467913709bf3c3
X-Google-Attributes: gidfcea4,public
From: "Datalore" <slipstreamdrive@hotmail.com>
Subject: Re: oneindige lussen in C++
Date: 2000/07/23
Message-ID: <JgAe5.139053$Ji7.2493918@afrodite.telenet-ops.be>
X-Deja-AN: 649728701
References: <39799d7e$0$12145@bru5-newsr2.be.uu.net>
X-Priority: 3
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
X-Trace: afrodite.telenet-ops.be 964350121 213.224.10.181 (Sun, 23 Jul 2000 13:02:01 MET DST)
Organization: Blah
X-MSMail-Priority: Normal
NNTP-Posting-Date: Sun, 23 Jul 2000 13:02:01 MET DST
Newsgroups: be.comp.programming