errox Geschrieben 29. August 2009 Teilen Geschrieben 29. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 29. August 2009 Teilen Geschrieben 29. August 2009 Hallo, wenn du es selber schreiben willst, würde ich die das Zählen in einen seperaten Thread auslagern. Alternativ kannst du auch die .NET Klasse Timer verwenden. Wenn der Timer gestartet wurde, kannst du das Tick-Event abfragen, und dein Label nach belieben updaten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.NETter Geschrieben 29. August 2009 Teilen Geschrieben 29. August 2009 Ich würde es mit einem Objekt vom Typ Stopwatch erlediIm Namespace System.Diagnostic findestdu die Klasse Stopwatch. Gruss Thomas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
errox Geschrieben 29. August 2009 Autor Teilen Geschrieben 29. August 2009 Es geht ja nich jz generell ums Counten. Wenn ich z.B. mit nem Button klick ein Lied abspielen will, hängt sich das Programm so lange auf bis das Lied zu ende ist. Windows halt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.NETter Geschrieben 29. August 2009 Teilen Geschrieben 29. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
errox Geschrieben 30. August 2009 Autor Teilen Geschrieben 30. August 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 30. August 2009 Teilen Geschrieben 30. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
errox Geschrieben 30. August 2009 Autor Teilen Geschrieben 30. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.