共有回帖数  0  个 
	 
	
	
	
     
          
          
               
				
			 
				
					 
 
            
				   - 
						
						
							 
									时间陷阱.它能是主程序的运行和对事件的处理异步进行.通过设置时间陷阱.可以在规定的时间间隔到达后自动执行某个子程序.子程序运行结束后又回到主程序的断点处继续执行.basic语言提供了有关时间陷阱的语句.可以直接调用.但C语言没有这样的功能,为了能实现上述功能,这里给出了几个子函数以帮助实现.
 
 #includedos.h
 
 #define Sizeprogram 375
 void interrupt (*oldtimer)();
 void interrupt newtimer();
 static struct SREGS seg;
 unsigned intsp,intss;
 unsigned myss,stack;
 unsigned vseg;
 int running=0;
 int m1,m2,m3=0;
 int (*sub_ptr)();
 void on_timer();
 void timer_on();
 void timer_off();
 
 void on_timer(t,pp);
 int t;
 int (*pp)();
 {
 sub_ptr=pp;
 m1=t;
 segread(&seg);
 stack=(Sizeprogram-(seg.ds-seg.cs))*16-300;
 myss=_SS;
 oldtimer=getvect(0x1c);
 }
 
 void timer_on()
 {
 m2=0;
 m3=1;
 setvect(0x1c,newtimer);
 }
 void timer_off()
 {
 m3=0;
 setvect(0x1c,oldtimer);
 }
 void interrupt newtimer()
 {
 (*oldtimer)();
 if(running==0)
 running=1;
 disable();
 intsp=_SP;
 intss=_SS;
 _SP=stack;
 _SS=myss;
 enable();
 if(m3==1){
 if(m2==m1*18){
 m2=0;
 (*sb_ptr)();
 }
 m2+=1;
 }
 disable();
 _SP=intsp;
 _SS=intss;
 enable();
 running=0;
 }
 }
 
 #includedos.h
 #define TRUE 1
 void ptr();
 main()
 {
 char ch;
 char *p:
 p=(char *)ptr;
 on_timer(t,p);
 while(TRUE){
 ch=getch();
 switch(ch){
 case ''0'': timer_off();break;
 case ''1'': timer_on();break;
 case ''2'': timer_off();brea;
 default: printf("%c",ch);
 }
 }
 }
 
 void ptr()
 {
 union REGS in,out;
 in.h.al=''A'';
 in.h.ah=14;
 int86(0x10,&in,&out);
 }
 楼主 2016-10-13 15:37 回复 
 
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知