www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/03/21/06:01:34

From: James W Sager Iii <sager+@andrew.cmu.edu>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: DJ: Compiler Optimizations
Date: Sat, 21 Mar 1998 00:37:25 -0500
Organization: Junior, MCS Undeclared, Carnegie Mellon, Pittsburgh, PA
Lines: 61
Message-ID: <8p4p8J600YUx1_I0w0@andrew.cmu.edu>
NNTP-Posting-Host: po6.andrew.cmu.edu
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

>...                                                                    
        
>Windows 95 reprograms the system timer in certain ways that are not 100%      
>compatible with what Allegro wants it to do.  It seems that the faster        
>your computer is, the less problematic the timer is, but on slower            
>machines you can get error messages and potentially crashes.  If a timer      
>problem is occurring, Shawn Hargreaves provides a couple of ways to deal      
>with it.       
>Windows 95 makes much heaver use of virtual memory than does DOS.  In         
>fact, it may decide to swap some vital piece of your program's code or        
>data out of physical RAM while the program is running.  If this code or       
>data is part of or is used by an interrupt handler, it won't be there         
>when the system looks for it; thus causing a hard crash.  The solution        
>is to lock all code and data touched by interrupt handlers.  Swapping         
>happens under DOS, too, but it's far more likely to occur in Win95.     

Here's a snipit of code that I believe correctly locks out the function?
I'm fairly certain it works correctly, but I'd rather make sure.

#include "whatever.h"
//global flag type variable
volatile int V_cursor_flip;

//Interrupt function:
void cursor_blink()
{
V_cursor_flip=1;
}

END_OF_FUNCTION(cursor_blink);



void main(void)
{

//locking out the function
V_cursor_flip=0;
LOCK_VARIABLE(V_cursor_flip);
LOCK_FUNCTION(cursor_blink);
install_int_ex(cursor_blink, BPS_TO_TIMER(5));

while (true)
{

if(V_cursor_flip==1)
{
cout<<"The cursor flipped"<<endl;
V_cursor_flip=0;
}


//Whatever other code wanted.


}



                                                                            
                                                                      

- Raw text -


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