Date: Mon, 13 Jul 1998 11:21:33 +0300 (IDT) From: Eli Zaretskii To: Mariano Alvarez Fernández cc: djgpp AT delorie DOT com Subject: Re: About DJGPP v2.02 In-Reply-To: <35A931E7.6369@teleline.es> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-Transfer-Encoding: 8bit Precedence: bulk On Mon, 13 Jul 1998, Mariano Alvarez Fernández wrote: > > Seems you are calling `int86' a lot. What do you use it for? > > I use basically it to handle low-level keyboard input: > > #define _NAIVE_DOS_REGS > > int lee_tecla( void ) > { > union REGS regs; > > regs.h.ah = 0x01; > int86( 0x16,®s,®s ); > if( (regs.x.flags & 0x0040) != 0 ) return 0; > regs.h.ah = 0x00; > int86( 0x16,®s,®s ); > return regs.x.ax; > } This seems like a keyboard polling loop. Is it? If it is, then it is quite normal for interactive programs to spend a large portion of their running time in the keyboard loop. To get meaningful results about where such programs spend the rest of their time, you need to run the profiled program in a way that doesn't let it peek at the keyboard too much, like if you force it to do some long computation. Btw, while we are at it, several comments about this loop: 1) It is better to use functions 0x11 and 0x10 instead of 1 and 0, respectively, since the former functions support the extended 101-key keyboards. (The old 84-key keyboards are almost extinct by now, and if you want to support them as well, there's a function to test for that.) With functions 0x11 and 0x10 you can support keys like F11, the new editing keys, and some Ctrl- and Alt- key combinations which aren't supported by the old functions. 2) For your program to be a ``good Windows citizen'', it should call __dpmi_yield library function if the keyboard buffer is empty, to yield the rest of its time slice.