Newsgroup: it.comp.programmare.win32
Titolo: Come posso utilizzare i timer di windows

Allora, io devo utilizzare un timer per poter mostrare una MessageBox dopo
un determinato periodo di tempo.
Il mio problema è che non avendo una finestra non posso gestire il messaggio
WM_TIMER nella funzione CALLBACK WindowProc()
Quindi in SetTimer devo utilizzare una TimerProc(), esatto?
Ora come devo utilizzarla? Secondo, se devo impostare un HWND come parametro
e io non ho nessuna finestra madre associata con il timer, come faccio a far
funzionare la CALLBACK?
Utilizzando Null ottengo che la funzione CALLBACK diventa 0 o di dimensione
uguale a 0, almeno secondo il compilatore.
Potete aiutarmi e spiegarmi come usare un Timer anche senza una finestra
base?
Grazie a tutti.

 uguale a 0, almeno secondo il compilatore.
Non mi è chiaro, cosa vuoi dire ?
Porlock.


Anche in questo caso devi avere un message loop.
E' meglio utilizzare CreateWaitableTimer o Sleep in un thread secondario.
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

base?
Credo che i consigli che ti abbiano dato siano corretti.
--
Andrea Laforgia (ICQ 87230455)

Scusa un po' controlla questo piccolissimo esempio di programma che deve
avviare una MessageBox dopo un certo tempo. E' tutto ok in compile-time ma
in run-time non succede proprio nulla nemmeno dopo un ora.
//Allegato a questa email
#include <windows.h>
#define STRICT
#define WIN32_LEAN_AND_MEAN
VOID CALLBACK MyTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idTimer, DWORD
dwTime){
  if(uMsg == WM_TIMER){
  MessageBox(0, "Hello World!", "Hi!", MB_OK);
  }
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR
lpCmdLine,int nCmdShow){
 SetTimer(0, 1, 3000, (TIMERPROC) MyTimerProc);
 return 0;
}

Ringrazzio tutti della collaborazione.
Per rispondere a Porlock, se imposto il 1° parametro della TimerProc su
Null, dato che non ho nessuna finestra e quindi nessun handle, ottengo in
risposta dal Borland C++ Cmd-line compiler 5.5 che la funzione CALLBACK
TimerProc ha dimensione uguale a 0.
Perchè ciò?
Comunque ringrazio tutti per i preziosi consigli di cui avevo proprio
bisogno.

 ha scritto nel messaggio
news:8v1c80$o29$1...@pluto.sm.dsi.unimi.it...

Sono perplesso, io lavoro in Visual C++ 6.0 è non ho assolutamente
riscontrato questo errore.
Porlock.

 ha scritto nel messaggio
news:8v1f4d$oge$1...@pluto.sm.dsi.unimi.it...

Non succede niente perché la WinMain esce ed il processo termina. Tutti gli
oggetti del processo (timer compreso) vengono cancellati.
Porlock.

"Porlock" <por...@CAVAMIfreemail.it> ha scritto nel messaggio
news:8v2n1n$3t2$1...@fe1.cs.interbusiness.it...

Un momento, hai detto che hai settato il primo parametro della TimerProc a 0
?
Potresti farmi un esempio di quello che hai scritto ?
Porlock.

Il problema risulta che io nella funzione SetTimer(HWND hwnd, ...); imposto
come parametro dell' HANDLE alla finestra 0. Quando il messaggio viene
inviato alla funzione TimerProc(HWND hwnd, ...); e quando questa viene
eseguita nel primo parametro viene posto 0, naturalmente.
Quindi il compilatore mi dava l'errore.
---------->
Ti ringrazio del vivo interessamento su questo newsgroup, ma sono riuscito
con il translate e il dispatch dei messaggi.
----------->
Ora il problema è che la MessageBox si ripresenta all'infinito.
Ma anche questo poi l'ho risolto avendo posto return 0; dopo la chiamata a
MessageBox.