不是啦!某些时候写仿真软件的时候也会用到这个技术——比如,一个化工的反应要好几天
不可能傻不拉叽等几天吧,这就会用到这种技术,通过改写中断使时钟加快。
/*0x1c时钟中断保存*/
void interrupt(*oldint1ch)();
void changetime(unsigned int count)
{shudu=count;count=1192737/count;
outp(0x43,0x3c);outp(0x40,(count&0xff));
outp(0x40,(count>>8)&0xff);
}
/*获复时钟*/
void restoretime()
{outp(0x43,0x3c);outp(0x40,0xff);
outp(0x40,0xff);
}
/*新的多任务时钟中断0x1ch函数*/
void interrupt newint1ch()
{
int n,i;
(*oldint1ch)();/*执行旧的时钟软中断*/
if(busy){enable();return;}/*系统太忙返回*/
if(foodflag==1)foodcontrol();/*调用食物控制*/
outtime(0); /*显示当前时间*/
if(lifebusy){enable();return;}/*lifebusy是球是否的状态标志*/
if(int1chflag){enable();return;}
if(soundflag==1)/*背景音乐处理*/
{ if(soundn>7){soundflag=0;nosound();}
else if(sound1n<soundword[soundn][1]){gamesound(soundword[soundn][0]);sound1n++;}
else{soundn++;sound1n=0;}
}ballcontrol();/*调用弹子球控制*/
}
/*恢复时钏中断*/
int close1ch(int fg)
{if(fg==1){int1chflag=0;return;}
else if(fg==0)setvect(0x1c,oldint1ch);
}
/*设置时钟中断0x1ch*/
int init1ch(int fg)
{if(fg==1)int1chflag=1;
else
{ oldint1ch=getvect(0x1c);
changetime(shudu);
setvect(0x1c,newint1ch);
}
}
原理是这样的,不过在window下怎么实现我就不是很清楚了。