龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

c语言中时间陷阱的实现

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
时间陷阱.它能是主程序的运行和对事件的处理异步进行.通过设置时间陷阱.可以在规定的时间间隔到达后自动执行某个子程序.子程序运行结束后又回到主程序的断点处继续执行.basic语言

  

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

  

  

#include

  

  

#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;

  

}

  

}

  

  

#include

  

#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);

  

}

  

精彩图集

赞助商链接