Таймер не генерирует прерывания... или что?
#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... мне действительно нечего сказать:(