正文

语言中时间陷阱的实现2006-11-27 12:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/zean/20856.html

分享到:

语言中时间陷阱的实现     时间陷阱.它能是主程序的运行和对事件的处理异步进行.通过设置时间陷阱.可以在规定的时间间隔到达后自动执行某个子程序.子程序运行结束后又回到主程序的断点处继续执行.basic语言提供了有关时间陷阱的语句.可以直接调用.但C语言没有这样的功能,为了能实现上述功能,这里给出了几个子函数以帮助实现.#include<dos.h>#define Sizeprogram 375void 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;}}#include<dos.h>#define TRUE 1void 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);}本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。

阅读(307) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册