Auf Ereignisse im einfachen Programm reagieren
-
Hi,
sagen wir ich habe eine Anwendung nach diesem Motto:
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h> int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { MessageBox(NULL, "Hello World!", "Hello Title", MB_OK | MB_ICONEXCLAMATION); return(0); }Die Anwendung soll kein Fenster haben, sondern nur Code ausführen. Möchte eigentlich nur stündlich prüfen ob eine bestimmte Datei existiert und dann in ein Logfile schreiben.
Kann ich in meinen simplen Beispiel auf Ereignisse Reagieren? WIe müsste der WM_TIMER oder was ich brauche dann aussehen?
Johannes
-
Reagier auf WM_TIMER in der Fensterprozedur deines Fensters.
-
Dann brauchst du aber erstmal eine Message-Loop...

Oder du machst sowas hier: Using Waitable Timer Objects
-
hi flenders,
ich habe mir http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_waitable_timer_objects.asp mal angesehen.
dennoch wird mir nicht klar, wie ich dadurch in einer einfachen win main function, nachrichten empfangen und verschicken kann.
das muss doch irgendwie gehen, also so ne art wndproc funktion darein zu machen?
Johannes
-
Naja, bei dieser Variante hast du keine Message-Loop mit WndProc, sondern eben Events, auf die du mit WaitForSingleObject (ggf. in einer Schleife) wartest.
-
Warum machst du das nicht einfach in einem Fenster ?
Ich mein du willst das Programm doch auch irgendwie mal sehen oder es beenden können...
Soviel Arbeit ist ein Fenster ja auch nicht!Mir fällt spontan auch nicht ein wie du das sonst machen willst.
Wenn du dir in deine WinMain-Funktion eine while-Schleife reinmachst die dann schaut ob die Zeit rum ist und dann irgendetwas macht, dann kannste das auch vergessen weil dann der Prozessor nicht mehr viel anderes machen wird.
Es gibt dann natürlich noch die Möglichkeit das alles in einen Thread zu packen, der dann eben nur innerhalb von ein paar Hundern Nanosekunden prüft ob die Zeit vorbei ist und dann die Kontrolle wieder abgibt, sodass andere Sachen vom Prozessor erarbeitet werden können.
Aber ob das so sinnvoll wäre bezweifle ich.
Dann wieder nen Thread zu schreiben und dann hast du je nachdem was da alles drin passiert wieder irgendwelche Kritischen Bereiche... also mein Tip ist einfach ein Fenster zu nehmen ^^.Mfg Nico
-
Man braucht bei 32-Bit-Windows-Programmen weder Fenster noch eine Nachrichtenschleife.
Alle Systemroutinen lassen sich auch so aufrufen.
Falls man ein "unsichtbares" Fenster haben will, nimmt man entweder ein Message Window oder eben ein unsichtbares Fenster (d.h. man ruft ShowWindow() nicht auf und laesst im Fensterstil WS_VISIBLE weg).
Man kann uebrigens bei Anwendungen mit Fenstern die MessageLoop auch weglassen (und z.B. gelegentlich MsgWait***() und PeekMessage() aufrufen).