Problem mit Zeitanzeige in Schleife
-
@_matze
Mehr oder weniger, wenn ich die schleife durchlaufe kann es sein er fängt sich nicht mehr d.h. keine Zeitangabe oder nach einer gewissen zeit gibt er mir eine seltsame Ausgabe wo mehrere mahle die gleiche Uhrzeit steht ... danke für den Tipp mit dem Sleep() den ich brauchte eh noch eine alternative@theta
super Hinweis ... klingt im ersten Moment für mich als mögliche Ursache. Welche der beiden Formen würdest du empfehlen bzw habe vor für den Mac ebenfalls noch zu schreiben sollte ich mich dann jetzt schon auf eine bestimmte "Version" konzentrieren ... thx
-
gorekee schrieb:
@theta
super Hinweis ... klingt im ersten Moment für mich als mögliche Ursache. Welche der beiden Formen würdest du empfehlen bzw habe vor für den Mac ebenfalls noch zu schreiben sollte ich mich dann jetzt schon auf eine bestimmte "Version" konzentrieren ... thxEhrlich gesagt, ich habe nur den Code überflogen, gesehen, dass Du managed und native mischst und spätestens da kehrts mir den Magen... desshalb mein Hinweis.
Zum eigentlich Problem hat _matze sich schon geäussert.
Wie erwähnt, mit einem Timer lässt sich sowas realisieren.Zur Wahl der Sprache würde: Falls Du denselben Code für mehrere Platformen benutzen möchtest, empfehle ich Dir C++ (und zwar native!).
Simon
-
aha ok also falsch verstanden meiner Seite. Werde mich erst einmal informieren wo Unterschiede in diesen Bereichen liegen
Euch beiden noch mal ein ein danke schön!
-
muss hier leider noch mal ne frage los werden ...
Habe anstelle des sleep() nun einen SetWaitableTimer() genommen, jedoch wieder das gleiche Problem. Stell ich ihn auf 10sek dann kann ich für diesen Zeitraum meine Anwendung werde verschieben noch weiter verwenden.
Ist das normal oder habe ich erneut etwas übersehen?string zeit, sec; time_t starttime; tm *nun; StringBuilder^ sbld = gcnew StringBuilder(); sbld->Append(DateTime(0)); stringstream sstr; stringstream *Zsstr; //zeiger Zsstr = &sstr; //zuweisung bool loop = true; LARGE_INTEGER endTime; HANDLE timer = NULL; endTime.QuadPart = -100000000LL; timer = CreateWaitableTimer(NULL, true, NULL); //do{ if(!SetWaitableTimer(timer, &endTime, 0, NULL, NULL, 0)){ label1->Text = "timer set failed!"; } if(WaitForSingleObject(timer, INFINITE) != WAIT_OBJECT_0){ label1->Text = "timer wait failed!"; } else { label1->Text = "timer go!"; } starttime = time(0); nun = localtime(&starttime); *Zsstr << nun->tm_sec; *Zsstr >> sec; if(sec.length() < 2){ sec = "0"+sec; } sstr.clear(); sstr.str(""); *Zsstr << nun->tm_hour << ":" << nun->tm_min << ":" << sec; label1->Text = gcnew String(sstr.str().c_str()); //}while(loop);
-
Ja, das ist normal so wie Du das impl. hast.
Du musst auf einem anderen Thread warten.Du hast Dich also für die C++ Variante mit WinAPI entschieden.. oder?
Simon
-
ja das habe ich ...
Woran kann ich eigentlich managed und native am besten unterschieden. Ich habe mir das jetzt so zusammengereimt das managed System:: stehen hat und das native std:: ist?Ich würde jetzt einen eigenständigen thread schreiben der mir immer die zeit ausgibt, diesen aufrufen und somit müsste meine main() voll funktionsfähig bleiben?
-
gcnew und der '^'-Kram ist z.B. managed-Zeugs, deine Steuerelemente wohl auch...
-
ja das habe ich ...
Und wie sieht deine Entscheidung aus?
Übrigens gibt es Timer, die via Windows Messages "daherkommen", dann müsstest Du dein GUI Update nicht auf den UI Thread marshallen (weil der Update ja schon auf dem korrekten Thread kommt).
Simon
-
Da _matze gesagt hat das meine Steuerelemente managed sind, werde ich wohl erst einmal mit managed Code arbeiten ... somit habe ich zwar später doppelte Arbeit aber ich steh im Moment ein wenig unter Zugzwang.
Zum Thema WMessages, dann müsste ich für dauerhafte Zeitangabe ständig WMessages erzeugen bzw. abfangen. Könnte das gut gehen?
-
WinAPI und Mac wäre auch nicht wirklich cleverer...
-
Dappeljuh schrieb:
WinAPI und Mac wäre auch nicht wirklich cleverer...
Das spielt dann auch keine Rolle mehr, wenn er .NET verwendet...
Zum Thema WMessages, dann müsste ich für dauerhafte Zeitangabe ständig WMessages erzeugen bzw. abfangen. Könnte das gut gehen?
Die Messages erzeugt der Timer für dich. Du merkst gar nicht dass es mit Messages gelöst ist. Ausserdem machst Du im Moment nichts anderes, denn Control.Invoke(..) funktioniert via Messages.
Also, guck dir den Timer aus System::Windows::Forms an.
Simon
-
OK das werde ich, danke.