#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(这是强制性的)
答案 0 :(得分:0)
您是否尝试在Win XP中应用某些DOS内容?它可以工作的最后一个操作系统是Win98。从WinNT开始,您只能在内核模式下直接访问硬件资源,编写内核模式驱动程序。
在您的情况下,尝试找到一些用户模式等效的定时器中断处理(如多媒体计时器,http://msdn.microsoft.com/en-us/library/dd743609(v=vs.85).aspx),或开始编写Windows驱动程序:http://msdn.microsoft.com/en-us/windows/hardware/default.aspx
关于Borland C ++ 3.1 ......我真的无话可说:(