Timer programmieren
-
Nee
- ich dachte, das ging ohne Nachrichtenschleife 
Wie kann ich denn eine Nachrichtenschleife "einbauen"?
-
#include <windows.h> void CALLBACK timerprog(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { MessageBox(NULL, "test", "test", MB_ICONINFORMATION | MB_OK); } int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { SetTimer(0,0,5000,timerprog); MSG message; while(GetMessage(&message, NULL, 0, 0)) { DispatchMessage(&message); } return 0; }
-
Vielen Dank für den Code!

Aber gibt es denn da eigentlich auch noch eine andere Möglichkeit?
Das Problem ist, dass ich vor "return 0" noch eine Menge andere Funktionen
aufrufe - und danach kommt ja erst die while-schleife
-
Du könntest z.B. einen eigenen Thread erstellen, der nur für den Timer verantwortlich ist. Was besseres fällt mir nicht ein.
-
a) TimerId (2.ter Parameter) darf nicht 0 sein, dann sollte auch die einfachstversion klappen.
b) solltest Du den Timer auch mit KillTimer beenden
-
a) TimerId (2.ter Parameter) darf nicht 0 sein, dann sollte auch die einfachstversion klappen.
If the hWnd parameter is NULL, this parameter is ignored.

-
Öhhm... wie packe ich das ganze denn in einen eigenen Thread?
Bin in Sachen Threads noch ein totaler Anfänger
-
Forensuche und _beginthread(ex)

-
Hi!
Das mit dem Thread-erstellen hat schonmal super geklappt!
Doch was muss da jetzt alles mit ´rein? - Die Message-Schleife und der
"SetTimer"-Aufruf?
Thx!
crazychicken
-
Wenn der Thread nur diese eine Aufgabe hat kannst du ihn auch einfach mit Sleep lahmlegen

-
Vielen Dank für die ganzen Antworten!
Habe es jetzt endlich geschafft:#include <windows.h> #include <process.h> void thethread(PVOID pvoid); void CALLBACK thetimer (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime); int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { _beginthread(thethread,0,NULL); Sleep(20000); return 0; } void thethread(PVOID pvoid) { SetTimer(0,0,5000,thetimer); MSG message; while(GetMessage(&message, NULL, 0, 0)) {DispatchMessage(&message);} } void CALLBACK thetimer (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { MessageBox(NULL, "Test!", "Test!", MB_ICONINFORMATION | MB_OK); }Jetzt muss man den Thread natürlich noch ordnungsgemäß beenden...
und fertig is
Nochmal thx für eure Antworten!
crazychickenPS: Ich könnt´ mir den Code gut in den FAQs vorstellen

-
Warum nimmst du nicht einfach ein Sleep in deinem 2. Thread

-
Warum sollte er das?
-
Einfacher
- hat doch auch keinen Nachteil 
-
Warum nimmst du nicht einfach ein Sleep in deinem 2. ThreadHast ja recht
- hab´s geändertPS: Wie killt, bzw. beendet man eigentlich einen Thread? - Reicht da ein
einfaches "_endthread()"?THX!
-
einfach auslaufen lassen
