计时器不会产生中断......或者是什么?

时间:2011-09-11 14:15:53

标签: c++ timer operating-system interrupt

#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(这是强制性的)

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 ......我真的无话可说:(