【发布时间】:2011-09-11 14:15:53
【问题描述】:
#define TIMER_IVT_ENTRYNUM 0x1C
或者
#define TIMER_IVT_ENTRYNUM 0x08
prevInt = getvect(TIMER_IVT_ENTRYNUM);
setvect(TIMER_IVT_ENTRYNUM, currInt);
这就是我设置自己的中断处理程序的方式,如下所示:
void interrupt Timer::currInt(...) {
(*prevInt)(); //old timer routine
cout << "TIMER occurence" << endl;
lock();
counter++;
tick(); //empty body
if ( (Kernel::getRunning() -> getTimeSlice() > 0) )
if (counter >= Kernel::getRunning() -> getTimeSlice()) {
unlock();
dispatch();
//dispatchInterrupt();
};
unlock();
};
无论如何,定时器中断根本不会自行发生...但是如果我使用geninterrupt(TIMER_IVT_ENTRYNUM) 显式调用 int 例程,它就可以工作...
就像计时器本身永远不会产生中断... o.O 我在 Win XP 32bit,Borland C++ 3.1(这是强制性的)
【问题讨论】:
-
顺便说一句,为了确保程序运行超过 55 毫秒,我在 volatile 变量上加载了数百万次操作,因为我不确定
sleep(seconds)是否独立于计时器......我想它是,但即便如此,也没有中断执行的证据……
标签: c++ timer operating-system interrupt