Newsgroup: it.comp.lang.c++
Titolo: creo istanza di una classe e poi

Creo un istanza di una classe e poi vorrei che questa classe continuasse a
fare un operazione
temporizzata senza che il programma chiamante debba intervenire ma soltanto
accedere quando può hai risultati,
come si può fare?









...

Dipende dal sistema operativo su cui lavori.  Supponendo che per
"operazione temporizzata" tu intenda una certa esecuzione da
compiersi con una qualche periodicita', in Windows puoi ad esempio
impostare un timer, che mandera` in esecuzione una certa funzione,
ripetutamente, ogni tot millisecondi.
Alex

Alex Martelli ha scritto nel messaggio ...

Fino a questo punto ci sono arrivato ed infatti la funzione l ho impostata
in modo da fare quello che deve fare ogni tot millisecondi, il problema che
mi chiedevo è come faccio a farla partire,
normalmente se chiamo un funzione il programma aspetta che questa finisca,
in che modo posso fargliela mandare in contemporanea con l esecuzione del
resto del programma?
Penso(spero) che sia una banalità ma non ho ancora studiato tanto :) ...

resto del programma?
Vuoi andare in multi-threading?  Su Win32, questo si ottiene
con CreateThread, o meglio con CreateThreadEx -- a livello
di sistema nudo e crudo; attenzione, pero`, che se il sistema
NON lo usi nudo e crudo, dovrai probabilmente usare il "guscio"
che attorno a queste primitive API pone il tuo sistema di
sviluppo -- ad esempio, con Microsoft Visual C++, la funzione
_beginthreadex; con MFC, AfxCreateThread; ecc, ecc; questo,
perche` l'ambiente runtime ha bisogno di fare le _proprie_
inizializzazioni per-thread, e le fa appunto entro questi "gusci".
Tuttavia, il multi-threading non e' necessario per ottenere una
esecuzione periodica, purche` la struttura generale del tuo
programma sia quello di una normale applicazione Win32, e
in particolare vi siano frequenti controlli della coda dei messaggi;
la call-back alla tua funzione impostata con SetTimer avviene in
modo trasparente, da parte del sistema, quando (a) il momento
e' arrivato E (b) il tuo programma interroga la coda dei messaggi
e si accinge a gestirli (a livello API, la DispatchMessage e' molto
piu` sottile e potente di quanto non sembri -- e anche PeekMessage,
l'umile GetMessage, per non dire della TranslateMessage, e
della IsDialogMessage, ecc ecc, non scherzano!-).
Una trattazione riassuntiva ma precisa di questi argomenti puoi
trovarla nel Richter, "Advanced Windows-32 Programming", Microsoft
Press (esiste anche in italiano, Mondadori Informatica, traduzione
cosi` cosi`, ma usabile).  Mi pare che anche Petzold e Yao li
spieghino abbastanza bene, ma non altrettanto di Richter.
Se poi non stiamo parlando di Windows-32, ma di altri ambienti,
allora il discorso cambia in modo drastico.  Devi chiarircelo...!
Alex


Stiamo parlando di un sistema basato su win 95 98 , lo davo un po di default
scusate,
però l applicazione non è affatto un applicazione troppo normale perchè si
tratta di un .x32
e cioè di un extras per macromedia director e dopo essermi disperso nelle
migliaglia di macro
della macromedia ho appunto il problema di eseguire una funzione
periodicamente in modo che director possa accedere hai risultati di tale
funzione quando ne ha il tempo, visto come spreca in modo incredibile cicli
macchina.
Il problemone è che ho serie difficoltà a compilare l xtras utilizzando l
mfc in pratica mi cozzano insieme un sacco di ridefinizioni della macromedia
rendendo il lavoro inumano, qualche scappatoia l ho trovata , infatti riesco
a utilizzare le classi di c della mia libreria (con serie modifiche visto
che all inizio non  mi riconosceva in compilazione nemmeno gli int, ma mi
richiedeva gli Imoaint)...
ho provato a simulare la cosa facendo chiamare a director una funzione con
un ciclo infinito in modo che continuasse a lavorare, e poi a chiamare
sempre da director un altra funzione che leggesse i valori che l altra
salvava ma la cosa è risultata abbastanza lenta, nel senso che leggo 10
valori al secondo soltanto e dovrei arrivare almeno a 30, quindi chiedevo se
era possibile
appunto far andare una funzione alla creazione dell istanza della classe e
lasciarla in esecuzione finche la classe resta aperta...
comunque grazie, mi spacchero un poco la testa ... ma una soluzione prima o
poi la trovo :)
ciao
Luciano

migliaglia di macro
Ah!  Ma da questi "extras", le chiamate delle API di Windows a 32 bit,
puoi farle?  Perche' proprio questo ti servirebbe, specificamente una
SetTimer(0, 0, nMillisec, pTuaProcedura), dove la tua procedura, il
cui indirizzo passi come ultimo parametro, dev'essere dichiarata
(NON entro una classe!!!):
void CALLBACK tuaProcedura(HWND,UINT,UINT,DWORD) {
    // tutto quel che vuoi fare...
}
I parametri non interessano, ma devi dichiararli (come tipo, inutile
dargli un nome) per correttezza di tipo.
Alex


Stiamo parlando di un sistema basato su win 95 98 , lo davo un po di default
scusate,
però l applicazione non è affatto un applicazione troppo normale perchè si
tratta di un .x32
e cioè di un extras per macromedia director e dopo essermi disperso nelle
migliaglia di macro
