底层编程 - 时间陷阱

/********
使用过basic语言的朋友都知道,basic中有一种重要的功能,就是时间陷阱.它能是主程序的运行和对事件的处理异步进行.通过设置时间陷阱.可以在规定的时间间隔到达后自动执行某个子程序.子程序运行结束后又回到主程序的断点处继续执行.basic语言提供了有关时间陷阱的语句.可以直接调拥獵语言没有这样的功能,为了能实现上述功能,这里给出了几个子函数以帮助实现.

    on_timer(t,p):    设定定时时间间隔为t(以秒为单位).并规定了事件处理子函数的入口点.t是整
                      型数,p是指向子函数的指针.
    timer_on():      启动定时器开始计时.以后每个t秒,指针p所指向的子函数运行一次.
    timer_off():    关闭定时器.


<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

下面是子函数清单.
***************/
/*timer 模块源程序清单*/

#include<dos.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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值