Newsgroup: it.comp.appl.access
Titolo: Programmazione a thread

Spiegatemi bene, per favore.
Sapete che ho fatto un programmma che a un certo
momento chiama una API :
SETIMER T, ...,  addressof  MIA_FUNZIONE
Questa "setimer" che vedete che ti fa ? Niente. :-)
A parte il fatto che ogni T millisecondi il sistema operativo
stesso della macchina e' forzato a chiamare la MIA_FUNZIONE,
il cui indirizzo glielo passo (al sistema operativo) tramite la
parola chiave addressOf, seguita dal nome della funzione.
Dopo che il programma principale chiama la SETTIMER,
non e' che si ferma. Continua a eseguire le istruzioni
successive. Pero' ogni T millisecondi il sistema operativo
prende il controllo, "stacca" il programma principale, e passa
il controllo a MIA_FUNZIONE, che appena termina ripassa
il controllo al programma principale.
prima domanda :
1)
E quindi bisogna stare attenti, perche' se la mia_funz. non
ha ancora finito dopo l' intervallo di tempo, il sistema operativo
la richiama, e poi ancora e ancora ... Addio stack ! E non solo.
La prima cosa che devo fare all' interno della mia_func e'
quindi quella di AMMAZZARE il timer, fare le cose e poi
riaccenderlo (oppure essere sicuri che le cose che deve fare
prendono *meno* tempo dell' intervallo tra una chiamata
e l' altra)
2)
Ma siamo sicuri che funzioni proprio cosi' ? Mmmmh.
Sapete come' ,la teoria e' na cosa, la pratica un altra.
Cioe' la MIA_FUNZIONE prende effettivamente il controllo
*qualunque* cosa stia facendo il programma principale
interrompendolo COMPLETAMENTE ?
Qualcuno mi sa dare precisazioni in proposito ?

 
A suo tempo (era VB non Access ma fa lo stesso) ho fatto una 
applicaziione che piu' o meno ragionava nelle stesso modo tramite timer.
Non facevo la address of ma richiamavo direttamente la funzione (che 
necessita' hai della address of?).
La funzione chiamata aveva una vita variabile e spesso durava piu 
dell'intervallo timer. Soluzione semplice semplice semaforo on in 
entrata della funzione, semaforo off in uscita.
All'innesco del timer semplilce test del semaforo

 necessita' hai della address of?).
Perche' :
1)
E' di facile utilizzo,
2)
non hai bisogno di mettere un controllo timer,
3)
te ne puoi accendere quanti ne vuoi e tutti
indipendenti l' uno dall' altro
4)
T' impari i rudimenti del call back per applicazioni successive

 
Vediamo come una cosa del genere l'ho, a suo tempo, risolta
1) Form con timer
2) Etichetta sul form con scritta "Tempo rimanente : xxx"
3) Sorry tempo "spirato" "aricomincia" (o "torna all'inizio" come in 
qualche gioco da tavolo)
C'e' una differenza nella tua ipotesi. Riesci a ripristinare se il main 
va in crash. Ma che succede se va in crash il pezzo di ferro (stazione 
di lavoro)?

 di lavoro)?
Eh figlio mio ... Se ti va in crash quella e non ti sei fatto qualche
copia
di back up (io ho una copia di tutto il PC su un server e una su un'
altra
macchina) che te voi inventa ? API o non API, addio ...
A meno che non chiami il RESCUE DATA della finanza ! :D
(quelli che leggono i dati sul C: pure se l' hai formattato a basso
livello e immerso in acqua )

 livello e immerso in acqua )
Nein. E' sempre possibile (e doveroso) fare una funzione ripetibile

 Nein. E' sempre possibile (e doveroso) fare una funzione ripetibile
D' accordo.
Ma che cos' e' una funzione "ripetibile" ? :D
P.S.
Scusa m' approfitto per chiederti una cosa si SqL :
supponiamo di avere 2 tabelle A e B aventi un campo kiave K
Se faccio :
select * from A where NOT (A.K = B.K),
secondo te che esce fuori e perche' ?

 ha scritto nel messaggio 
news:cff21df4-3110-42c2...@d16g2000yqb.googlegroups.com...

Forse nei giorni passati mi sono perso qualcosa...
Ma se ti interessa che ogni tot millisecondi si attivi una tua particolare 
routine, non è più semplice se attivi l'evento 'su timer' della maschera e 
poi inserisci i millisecondi che vuoi nel parametro 'Intervallo timer' ? 
Quel metodo di cui parli tu, per intenderci quello con addressof, si 
utilizza per fare in modo che la routine venga attivata anche quando non è 
attivo il tuo programma. Se il tuo caso non è tanto sofisticato da 
richiedere questo, credo proprio che sia più prudente utilizzare l'evento 
'su timer'.
Ciao
Antonio

Se il tuo caso non è tanto sofisticato da richiedere questo,
*questo* no, ma ho in essere un' altra applicazione che debbo
mantenere attiva 24h/24h.

 secondo te che esce fuori e perche' ?
Esce fuori un prodotto cartesiano (quasi puro).
Per ogni riga di a tutte le righe di b meno una

> mettono,
P.S.
Nun la butta' in caciara. I 10 cicli riguardano solo il timer.
Ci metti di piu' a fare una if.

> Ma che cos' e' una funzione "ripetibile" ? :D
P.P.S.
E una operazione che se pure si interrompe in modo non regolare e' 
possibile ripeterla senza eseguire procedure aggiuntive (i.e. uso di 
backup o procedure di ripristino) poiche' ha in se le logiche di ripartenza.

 backup o procedure di ripristino) poiche' ha in se le logiche di ripartenza.
Ebbe' ma allora questa e' cosi'. O mi sfugge qualcosa ?
P.S.
Dunque esce il prodotto cartesiano. Si ho capito.
Hai ragione.
Ma non c'e' verso con l' SqL di dire :
caccia fuori tutti i record che sono in A ma non in B,
(o in B ma non in A) vero ? O si ?
Fin ora ho dovuto sempre ricorrere ai cursori,
con l' SqL non ci sono mai riuscito ...

 con l' SqL non ci sono mai riuscito ...
Non usare la parola "cursore" che mandi ai matti il 87,3% della gente 
che frequenta questo NG ;-{)

della gente che frequenta questo NG ;-{)
Come mai ?

 Come mai ?
Perche' qui sono abituati al recordset ed il cursore e' solo quello che 
"blinka" sul video.

quello che "blinka" sul video.
:D
Mo' te chiamo.

Se il tuo caso non č tanto sofisticato da richiedere questo,
*questo* no, ma ho in essere un' altra applicazione che debbo
mantenere attiva 24h/24h.
Allora l'attuale programma modificalo utilizzando l'evendo timer della 
maschera che č meglio, per quello ancora da fare, leggi questo articolo 
http://www.ioprogrammo.it/tipstricks/vb6keylogger-t18325.0.html
 Io ho usato 
qualcosa del genere in visual basic, ma credo che possa funzionare anche in 
access.
Ciao
Antonio