www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/08/22/11:12:54

From: "Alex Oleynikov" <alex AT compuweigh DOT com>
Newsgroups: comp.os.msdos.djgpp
References: <frN89.72711$Pb DOT 3104967 AT news2 DOT east DOT cox DOT net> <Xns9271C2B62A250asu1cornelledu AT 132 DOT 236 DOT 56 DOT 8>
Subject: Re: Problem with tight kbhit() loop
Lines: 49
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
Message-ID: <WC599.109$Or1.19277@news2.east.cox.net>
Date: Thu, 22 Aug 2002 13:25:10 GMT
NNTP-Posting-Host: 68.15.54.9
X-Complaints-To: abuse AT cox DOT net
X-Trace: news2.east.cox.net 1030022710 68.15.54.9 (Thu, 22 Aug 2002 09:25:10 EDT)
NNTP-Posting-Date: Thu, 22 Aug 2002 09:25:10 EDT
Organization: Cox Communications
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

"A. Sinan Unur" <asu1 AT c-o-r-n-e-l-l DOT edu> wrote in message
news:Xns9271C2B62A250asu1cornelledu AT 132 DOT 236 DOT 56 DOT 8...
> "Alex Oleynikov" <alex AT compuweigh DOT com> wrote in
> news:frN89.72711$Pb DOT 3104967 AT news2 DOT east DOT cox DOT net:
>
> > Hi all,
> >
> > I have a question about using kbhit() function in a tight loop like
> > the one below:
> > ...
> > while( !kbhit() );
> >
> > ch = getch();
> > ...
> >
> > If I just run the program that contains this code everything works
> > fine. Now, if I run this program under the RHIDE's debugger and have
> > some breakpoints prior to the code listed above, then this loop never
> > quits and computer locks up completely (only cold re-boot helps to
> > restart it) and sometimes even my CMOS settings are get screwed up, so
> > BIOS loads their default values at start-up making me go nuts
> > restoring them :o).
> >
> > The problem goes away if I put some time-consuming operation inside
> > the loop, like a call to printf(..) or delay(..) functions.
> >
> > Is there a rational explanation to this situation? Is it specific to
> > DJGPP? I have tried the same code under Borland Turbo C++ 2.0 and it
> > always works fine even if I have the breakpoints to visit before
> > getting into that loop.
>
> there is a possiblity that your code contains a bug.
>
> however, it is a good idea to modify your loop to
>
> while(!kbhit())
>     dpmi_yield();

This fix works.

> so that your environment (probably windows) remains responsive.

No, there is no sight of Windows on that computer - DOS only.
Thanks for advice.

Alex


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019