Таймер не генерирует прерывания... или что?

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

в любом случае, прерывания по таймеру вообще не происходят сами по себе... но если я вызываю процедуру int явно, используя geninterrupt(TIMER_IVT_ENTRYNUM) оно работает...

Как таймер никогда не генерирует прерывания сам... oO Я на Win XP 32bit, Borland C++ 3.1 (это обязательно)

1 ответ

Вы пытаетесь применить некоторые вещи DOS в Win XP? Последней ОС, где он мог работать, была 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... мне действительно нечего сказать:(

Другие вопросы по тегам