Problem mit Zeitanzeige in Schleife



  • 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.


Anmelden zum Antworten