Newsgroup: it.comp.programmare.win32
Titolo: Timer in C++

Ciao a tutti,
vi spiego brevemente ciň che vorrei fare:
vorrei costruire una DLL in C++ che esegua delle funzioni in modo asincrono
rispetto al programma chiamante. Nel senso:
Il programma chiamante in Visual Basic esegue una funzione della DLL che
chiameremo "Start".
Questa funzione dovrebbe far partire una specie di Timer all'inteno della
DLL.
Alla fine di un intervallo specificato (anche molto breve di qualche
millisecondo), il Timer della DLL dovrebbe generare un evento in modo da far
partire l'esecuzione di alcune funzioni al suo interno.
Il tutto mi serve perchč il programma chiamante deve riavere subito il
controllo e continuare la sua esecuzione senza aspettare che le funzioni
all'interno della DLL finiscano il lavoro (che potrebbe essere anche lungo).
Lo so, potrei costruire un eseguibile in C++ anzichč una DLL e il problema
sarebbe risolto, perchč una volta lanciato l'eseguibile questo va per la sua
strada e il programma chiamante pure,  ma vorrei cercare di farlo con una
DLL.
Avrei bisogno di qualche esempio concreto di come implementare questo timer
oppure se esiste qualche altra soluzione.
Grazie 1000!

 DLL.
Va benissimo anche con una DLL. Dai un'occhiata all'API
SetTimer. Gli passi la funzione TimerProc che vuoi che venga
chiamata quando l'intervallo di tempo è trascorso e sei a
posto.
HTH,
==========================
Stefano Frosio
http://www.esse-effe.com
==========================

 posto.
Grazie! .. mi sa che è proprio quello che cercavo! ora faccio qualche
prova...

 
Tieni presente che il meccanismo funziona solo se il thread in cui hai 
richiamato la SetTimer ha un loop dei messaggi e sta processando i 
messaggi.
Se, ad esempio, hai un caso simile:
int flag=0;
void pippo()
{
    	flag=1;
}
SetTimer(pippo);
while (!flag);
Il programma è bloccato poichè "pippo" non verrà mai eseguita.
Nel caso in esame, forse vale la pena di creare un secondo thread che, 
dopo una sleep con un timeout pari al tempo minimo necessario (la 
durata di questi tempi su Windows è assolutamente indicativa!) inizi a 
eseguire le attività richieste.
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 [...]
non pensare in termini di EXE e DLL separati, una volta che l'uno ha
caricato l'altro si tratta della stessa cosa (stesso processo): le tue
pagine sono quelle, le funzioni stanno tutte lą e le puoi chiamare come
vuoi.
pensa piuttosto in termini di thread e considera queste due ipotesi di
lavoro:
1) usi un solo thread con una finestra e (come ti ha detto anche Valter
Minute) un loop di messaggi; fai SetTimer e aspetti.
2) usi due thread: il primo fa partire il secondo e poi continua il suo
lavoro; il secondo appena parte si addormenta con una opportuna Sleep e
poi fa quello che deve fare.
nella seconda ipotesi ricordati anche di rispettare opportune regole di
sincronizzazione tra i due thread.
comunque in entrambe le ipotesi puoi dividere il codice tra EXE e DLL come
ti pare.
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 poi fa quello che deve fare.
ho provato sia con SetTimer che con i due thread e devo dire che
la soluzione con i due thread è decisamente quella che mi serve.
Ho implementato il tutto, e funziona egregiamente! .. (fino a prova
contraria) :-))...
Grazie a tutti per il "pronto soccorso"!