2016-04-21 5 views
-3

Liebe, hier habe ich ein kleines Programm unter Aktion/Prozesse der Reihe nach zu tun. jetzt tue ich unten in einer Funktion, scheint nicht gut :)Wie führe ich meine Aktionen der Reihe nach mit etwas Schlaf während es? (C++, winapi)

  1. Init-Benutzeroberfläche, löschen EDIT-Box, Listview; Initiiere den Status der Tasten und so weiter;

  2. Stromversorgung meine Geräte;

  3. benötigen 20 Sekunden Schlaf oder Timer, weil das Gerät Zeit für den Start benötigt;

  4. Verbindung mit Gerät, lesen Sie einige Daten davon;

  5. brauchen 3 Sekunden, um Rückmeldung vom Gerät zu warten;

  6. Antwort vom Gerät erhalten, die Daten entschlüsseln und auf der Benutzeroberfläche anzeigen;

...

Vorerst benutze ich nur sleep() in meinem Programm, und führen Sie die obigen Schritte einer nach dem anderen. Glücklicherweise weiß ich von stackoverflow, dass mein aktueller Weg nicht gut ist, die Rückmeldung und das Update der Benutzeroberfläche ist sehr langsam, und manchmal, das Programm sogar einfrieren, ziemlich dumm.

Und einige ältere Kerle sagten mir, ich sollte Timer statt Schlaf verwenden.

Also, meine Frage ist: Wie Timer in meinem aktuellen Programm zu verwenden? (tun Sie es einfach wie die MSDN sagen?) Wie kann ich es basierend auf oben genannten Anforderungen verbessern? Benötige ich Multithread?

Sorry für so viele Fragen :)

der Tat möchte ich alles besser.

Vielen Dank im Voraus.

+1

Polling überhaupt nicht verwenden (die Verwendung eines beliebigen Schlummers ist der Vorläufer des Pollings). Ihre Anwendung wird besser sein, wenn Sie Veranstaltungen abonnieren und stattdessen auf diese reagieren. Verwenden Sie einen Zeitgeber nur zum Implementieren von Zeitüberschreitungen. – IInspectable

+0

Und falls keine Ereignisse verfügbar sind, ist die nächste beste Option, einen Worker-Thread zu verwenden, um das Gerät in einer Schleife mit einem Ruhezustand bei jeder Schleifeniteration abzufragen. In jedem Fall gehört das Geräte-Management definitiv nicht in den Haupt-UI-Thread Ihrer App. –

+0

@Inspectable, vielen Dank für Ihre Hilfe. Eigentlich kann ich nicht verstehen, was du gesagt hast: "Benutze überhaupt keine Umfrage", was ist das? Meinst du, ich sollte nicht zu viel Schlaf() in meinem Programm verwenden? Danke noch einmal. – NYwalker

Antwort

0

Sie nicht angeben, wenn Sie einen bestimmten Rahmen verwenden, damit ich eine Windows-Anwendung, mit der nativen Windows-API direkt zu übernehmen werde:

Anruf SetTimer es Ihre Fenster-Handle (HWND) vorbei, und die gewünschte Timer-Intervall und NULL für den TimerProc.

Ihre Fensterprozedur wird nun in regelmäßigen Abständen als WM_TIMER-Nachricht veröffentlicht - Sie können den ID-Parameter verwenden, den Sie an SetTimer übergeben haben, wenn Sie mehrere Timer gestartet haben - und schließlich , wenn Sie ihn nicht mehr benötigen.

+0

Sie sind richtig. Ich benutze eine Windows-Anwendung basierend auf Winapi, tut mir leid, dass Sie es nicht angeben. Meinst du ich sollte viele Timer für verschiedene Zeitintervalle erstellen, unterdessen verschiedene Events in Timern angeben um zu verarbeiten? Entschuldigung für mein Englisch. Danke vielmals. – NYwalker

+0

Ich meine, dass Sie, wenn Sie möchten, viele verschiedene Timer angeben und sie durch ID unterscheiden können. –

Verwandte Themen