{ Some months ago we discussed the problem With Dos Programs that eats CPU time in multitask environments (as OS/2), when they're idle. I have successfully used an Inline statement in my Pascal Programs that calls intr $28, which is the Keyboard Busy Flag, For this purpose. I found that Inline statement in a TurboPower Program, which they use to signalize to TSRs that it's OK to interrupt processing. Here's the Inline statement I use in keyboard loops: Inline($CD/$28); But... This statement doesn't work in the Idle method of Turbo Vision Programs... In our previous discussion on this subject, somebody here looked up another intr in Ralph Brown's excellent Compilation list of interrupts. This intr, $2F, works in another way by releasing the reminder of unused time-slice to the operating system. Called in a tight Program loop, this means that the Program will free up it's idle time to the OS. Here's a Function I made that I now use in TV's Idle method: } Uses Dos; Function ReleaseTimeSlice: Boolean; Var Regs: Registers; begin With Regs do begin AX := $1680; Intr($2F, Regs); ReleaseTimeSlice := (AL = $00); { AL=$80 if not supported by OS } end; end; { ...and here's how the Idle loop Uses it in a TV Program: } Procedure TMyProgram.Idle; begin TApplication.Idle; { more idle calls go here ... } { : } { Inline($CD/$28); } { this has no effect on PULSE.EXE by itself } ReleaseTimeSlice; { remember to use $X+ when Compiling the Program } end; { ...This works fine, judging by PULSE.EXE in OS/2. Ralph Brown also says this works in Windows, tho Windows native Programs may not use it. Maybe someone can comment on if it's necesarry to also put in the Inline statement above For servicing TSRs. I can't see any reason For not doing it, but I might've overlooked something here... :-) Borland doesn't do this in their Idle method For TP/BP. It should be quite easy to patch this in the RTL code, For those of you that have it, and reCompile BP. }