2009-07-27 4 views
3

Ich versuche, eine Windows-Anwendung, die einige Dinge im Hintergrund überprüft, und informieren Sie den Benutzer über ein Systray-Symbol.Erstellen Sie einen Hintergrundprozess mit Taskleistensymbol

Die App wird mit Not managed C++ erstellt und es gibt keine Option zum Wechseln zu .net oder Java.

Wenn der Benutzer die App stoppen möchte, verwendet er das Tray-Icon.

Die App kann wegen der Systray-Seite kein Dienst sein, und weil es ohne Installation nichts auf dem Computer des Benutzers ausgeführt werden muss (es ist eine einzelne EXE)

die typische Win32-Programmstruktur verwenden (Register, WndProc und so weiter) Ich weiß nicht, wie ich etwas Code platzieren kann, um die Fensternachrichtenschleife auseinander zu laufen. Vielleicht muss ich CreateProcess() oder CreateThread() verwenden? Ist es der richtige Umgang mit der Multithreading-Umgebung?

Wenn ich CreateProcess()/CreateThread() verwenden muss, wie kann ich zwischen den beiden Threads kommunizieren?

Dank;)

+0

Ihre Frage ist eigentlich viele Fragen. 1. Wie erstelle ich einen Hintergrundprozess? 2. Wie mache ich zwei Threads/Prozesse kommunizieren? 3. Wie erstelle und verwende ich ein Taskleistensymbol? –

+0

Sie haben Recht. Ich denke, die Nummer 2 ist die kompliziertere :) – HyLian

+0

In der Tat ... Und ich denke, Sie werden erfolgreicher sein, um hilfreiche Antworten zu erhalten, wenn Sie diese Probleme getrennt adressieren :-) –

Antwort

0

Ich bezweifle, dass Sie neue Prozesse erstellen möchten, dies zu tun, wollen Sie einen Thread in Ihrer Anwendung erstellen. Die API dafür ist CreateThread. Aber wenn Sie C++ verwenden, sollten Sie wirklich die Verwendung von Frameworks und Klassenbibliotheken untersuchen, um dies zu tun, nicht schreiben, was effektiv C-Code von Grund auf neu sein wird.

Alle zu einer Anwendung gehörenden Threads teilen sich die globalen Variablen der Anwendung, die somit für die Kommunikation verwendet werden können. Sie müssen solchen Multi-Thread-Zugriff mit etwas wie einem kritischen Abschnitt schützen.

+0

In der Tat muss ich einen Thread erstellen, und ich ' m sehr eng mit win32 api verbunden. Ich denke, dass CreateThread() die Aufgabe erledigen könnte. Aber wie kann ich zwischen den zwei Fäden kommunizieren? – HyLian

0

Nun, zunächst würde ich überlegen, ob Sie wirklich Ihren Überwachungscode auf einem separaten Thread ausführen müssen. Wenn Sie regelmäßig nur einige Werte oder den Systemstatus abfragen, können Sie wahrscheinlich alles in Ihrem Hauptthread mit einem Timer ausführen. Angenommen, das ist keine Option, erstellen Sie einen separaten Worker-Thread mit CreateThread, wie bereits vorgeschlagen. Erstellen Sie ein unsichtbares Nachrichtenfenster in Ihrem Haupt-Thread. Wenn der Worker den Hauptthread aktualisieren muss, sollte er eine Nachricht in Ihrem Fenster veröffentlichen. Der Haupt-Thread reagiert, indem er das Taskleistensymbol nach Bedarf aktualisiert.

Verwandte Themen