Newsgroup: it.comp.programmare
Titolo: interruzioni c++

ciao a tutti... avrei un piccolo quesito da porgervi.....
Per un progetto d'esame devo scrivere uno scheduler( entro il 18/02/2002
=< ) e sulla carta ho fatto quasi tutto... mi manca solo una cosa...
praticamente mi serve una funzione che ad intervalli regolari interrompa
l'esecuzione del processo fittizzio e  faccia partire la routine di
controllo dello scheduler... non lo so non c'è una funzione ( magari nella
libreria TIME.H ) che ad intervalli regolari salti ad una label?
Vi prego rispondetemi...
Ciauzzzz



devi indicare sotto quale s.o. vuoi realizzare questo esempio...
potresti sfruttare le caratteristiche del s.o. stesso per simulare
l'interrupt del timer, altrimenti se sei fuori da qualsiasi ti
interfacci al timer direttamente ... cmq non esiste nulla che salti ad
una label, normalmente si usano delle funzioni
Antonio

 ha scritto nel messaggio
news:36ov5uoreaatc3er5...@4ax.com...

Non mi appoggio a nessun kernel... cmq. credo che lo farò girare sotto
dos....
Anchio pensavo di sfruttare il timer di sistema ( int 1Ch ) e cmq. quando
ho detto label mi riferivo proprio alla chiama di una funzione... scusa se
sono
stato poco chiaro.... haaaa io sto usando il dev-c++4 oppure il borland
tc3.... ma
nessuno dei 2 mi fa usare l'assembly inline ( nel borland mi manca il tasm
=( si deve
essere danneggiato... ) e quindi non so che pesci pigliare.... come posso
reindirizzare
questo dannato int sulla procedura ( o funzione se preferisci =) ... ) che
fa il
monitor dello scheduling?
Grazie mille =)

Grazie mille =)
tc3 ti fa usare il'asm ... però fino a un certo punto
asm {
	istruzioni assembler
}
asm istruzione
in questo modo lo puoi usare tranquillamente, ma xché appoggiarsi
all'asm quando con tc3 puoi usare la lib bios.h o dos.h e quindi
generare chiamate di interrupt, oppure addirittura usare il
modificatore interrupt e creare una callback ...
guarda in tc3 l'esempio _dos_keep
ciao
Antonio

 ha scritto nel messaggio
news:0e406us66sisuh6lr...@4ax.com...

Preverò subito... grazie =)
però io l'assembly inline lo usavo già.... ma deve essersi danneggiato il
file tasm.exe =( perchè non mi funzina più...

 ha scritto nel messaggio
news:a3odfm$p2o$1...@lacerta.tiscalinet.it...

No.
La cosa migliore, in caso di DOS, è il vecchio remap dell'interrupt del
timer.
1. Ti agganci all'interrupt del timer
2. La tia ISR imposterà una variabile globale e poi scorrerà via
3. Il tuo processo fittizio continua a girare in loop e quando trova la
variabile globale impostata esegue la funzione (niente label, meglio
rimanere nel funzionale)
vediamo se trovo uno dei miei vecchi esempi...
...
Questo è un esempio in Borland C++; ovviamente metto solo le cose
interessanti.
// Prototypes per gli interrupt
void interrupt (*old_intv)(...);
void interrupt  isr1(...);
void setisr1();
// recupero vecchio ISR
old_intv=getvect(INT_NUMBER);
// impostazione nuovo ISR
disable();
setvect(INT_NUMBER,isr1);    // isr1 è la stessa isr1 dichiarata come void
interrupt
enable();
// a questo punto la tua ISR deve fare le sue cose (poche, mi raccomando!)
void interrupt isr1(...)
{
    global_counter ++;
    if (global_counter>=COUNTDOWN_VALUE) {
        global_variable = 1;
        global_counter = 0;
    }
}
// invece il ciclo principale sarà una cosa del tipo
while (condizione_per_rimanere_nel_loop) {
    i1 = global_variable;
    if (i1==1) {
        i1=0;
        esegui_funzione_di_controllo(parametri);
    }
}
HTH
Piero
P.S.: siccome è parecchio che non mi alleno lì (purtroppo bisogna fare
quello che ti chiedono e non quello che si vuole) non ricordo se la vecchia
ISR del timer va anche invocata direttamente o se è di fatto nulla in
generale. E' chiaro, però, che se questo programma gira assieme ad altri TSR
è buona cosa fare eseguire comunque la vecchia funzione. Lì mi sa che devi
vedere nell'help del compilatore con che sintassi invocare direttamente
l'ISR da dentro la tua ISR, non so se mi spiego...