Zum Inhalt springen

Counter in C++ .NET


errox

Empfohlene Beiträge

Hallo,

ich will ein kleines Programm erstellen und habe ein großes Problem:

Ein kleiner Counter soll es sein. Er beinhaltet ein Button und ein label.

Der Button soll der Start / Stop knopf sein. Das label die gezählte Zeit.

Relativ einfach, jedoch hab ich ein Problem:


if(count == true)

{

	//Wird gezählt

	while(1)

	{

	        (Convert::ToDouble(counter->Text) + 1).ToString();

	        Sleep(1000);

	}

	startstop->Text = "Stop";

	count = false;

}


else if(count == false)

{

	// Wird gestoppt

	startstop->Text = "Start";

	count = true;

}

Also von aufbau her Ziemlich leicht. Mein Problem ist halt die Endlosschleife, ich weiss nicht wie ich die Stoppen soll. Ich will halt, dass sich das Label live aktualisiert wie bei einer Richtigen Stopuhr.

Mein Problem seh ich, jedoch wo ist die Lösung? Es ist ja doof, das erst eine Aktion getan werden muss um eine neue zu starten ( z.B. die Daten im Label speichern )

Bei nem Media Player kann ich doch auch gleichzeitig Musik hören und die Liste durchzappen, ohne dass es hängt.

Vielen dank für eine Lösung

Liebe Grüße

errox

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

habe gerade wohl auch etwas zu schnell überflogen :-)

Ich muss mich der Meinung von Gooose anschließen. Threading ist hier das Zauberwort. Ein Thread ist eben eine "Ausästelung" einer laufenden Anwendung. So kannst Du mehrere Dinge (fast) unabhängig voneinander ausführen.

Wie Du schon sagtest kannst Du beim Mediaplayer wenn er denn nun läuft (hier haben wir den Hauptthread) auf Play drücken und die Abspielfunktion wird gestartet (neuer Thread).

Man sollte sich aber mit grundlegenden Dingen der Threadfunktionalität auskennen. Das Handling ist manchmal ziemlich Tricky! Threads müssen teilweise synchronisiert werden (joinen) wenn ein Thread auf den anderen warten muss oder soll.

Oder Du möchtest zum Beispiel immer die aktuelle Position des Liedes im Abspielbalken sehen. Der "Mainthread" weiß aber garnicht was der "Playthread" tut, und so muss der "Playthread" das tun. Aber da die Oberfläche vom "Mainthread" erzeugt wurde darf der "Playthread" die Oberfläche garnicht ändern. Anstatt dessen muss der "Playthread" über Delegates (Typensichere Funktionszeiger) mit dem Mainthread kommunizieren und ihn quasi bitten (über ein Event das der Mainthread konsumiert) eine Funktion in sich selbst aufzurufen (Invoke) um seine Oberfläche zu aktualisieren.

Aber lass Dich davon nocht abschrecken! Es lohnt sich dort wirklich mal einzulesen, da man das immer wieder einsetzen kann und sollte (Besonders bei Mehrkernprozessoren!).

Ich hoffe ich konnt etwas helfen!

Gruß,

Thomas

PS: Um einfach aus Deiner Schleife auszutreten würde ich einen boolschen Parameter ausserhalb der Schleife deklarieren und mit true initialisieren. Den Wert des Parameters kannst Du dann irgendwo im Programmablauf ändern und somit die Schleife verlassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok es hört sich gut an aber ich frag das Lieber trozdem nochmal:

Ich hab ein Kassierprogramm. Der Bondrucker is etwas Kompliziert und man kann nicht mehrere Aufträge über den Spooler drucken, sonst gehen sie Verloren. Also muss man sie direkt drucken. Das Problem: Wenn ich den Button drücke, hängt es so lange, bis alle Druckaufträge zu Ende sind.

Kann man das mit diesem "Threading" umgehen? Also ich drück auf den Button, er druckt direkt über den Drucker UND ich kann Weiter kassieren?

Wenn ja ist dieses "Threading" genau das, was ich suche!

Gibt es etwas .NET Spezifisches?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie greifst du denn auf den Drucker zu? Hast du eine .NET Bibliothek, mit der du den Drucker ansprechen kannst?

Wenn Spooling nicht möglich seien sollte, kannst du den Druckauftrag in einen seperaten Thread auslagern. Du müstest dann aber darauf achten das nach erfolgter Erteilung des Druckauftrags, nicht der Selbe noch einmal geschickt wird. Vom Hauptprogramm aus müsstest du überprüfen, ob gerad gedruckt wird. Nun ja, alles ein wenig Spekulation. Es kommt ganz darauf an wie deine Rahmenbedingungen sind. Es sind sicherlich noch weitere Überlegungen anzustellen.

Ich würde mich erst mal in das Thema Threading reinlesen und dann anhand einfacher Beispiele versuchen die Mechanismen nachzuvollziehen. Bei der Google-Suche nach ".net threading" wirst du sicherlich auf hilfreiche Seiten treffen. Als Sprachreferenz würde ich die MSDN nutzen. Dort sind auch einige Beispiele zu finden.

Viel Erfolg

Link zu diesem Kommentar
Auf anderen Seiten teilen

GDI in C++

Spoooling geht, aber ich hab meistens 30 Kleine Bons. Davon gehen 2 Verloren, wenn ich die über den Spooler drucken lass. Das sind 2 zu viel.

Gut ich werde mich informieren. Das ist das, was ich gesucht habe seid ich Entwickeln kann :)

vielen Dank und liebe Grüße

errox

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...