// v2_zad3.cpp // prevodjenje iz komandne linije: bcc -mh -Ic:\bc31\include -Lc:\bc31\lib v2_zad3.cpp #include #include // zabranjuje prekide - // na ovaj nacin omoguceno je // ugnezdavanje parova poziva lock-unlock #define lock asm{\ pushf;\ cli;\ } // dozvoljava prekide #define unlock asm popf // potpis interrupt rutine za rad sa setvect() i getvect() typedef void interrupt (*pInterrupt)(...); // stara prekidna rutina pInterrupt oldISR; // 5s X 18.2tic/s =~ 100tic volatile int cntr = 100; // prekidna rutina void interrupt timer(...) { if (--cntr == 0) { cntr = 100; cout << "...." << endl; } } // postavlja novu prekidnu rutinu void inic() { lock oldISR = getvect(0x1C); setvect(0x1C,timer); unlock } // vraca staru prekidnu rutinu void restore() { lock setvect(0x1C,oldISR); unlock } void doSomething(){ lock for (int i = 0; i < 30; ++i) { lock cout << i << endl; unlock if (i == 7) unlock else if (i == 25) lock for (int j = 0; j< 30000; ++j) for (int k = 0; k < 30000; ++k); } unlock } int main(){ inic(); doSomething(); restore(); return 0; }