Sleep funktion
-
_matze schrieb:
theta schrieb:
_matze schrieb:
Er nutzt ja den Builder...
Aber die die Sprache ist ja doch C++/CLI
.NET
also auch das Sleep aus .NET.
Bin davon ausgegangen, dass das nicht der Fall ist, da er gesagt hat, er sei im falschen Forum. Na ja, ist ja eigentlich auch egal...
du hast eig schon recht _matze.
leider führt er sleep zu erst aus bevor er das andere macht. ich hab es jetzt an einem ganz einfachen beispiel ausprobiert:
Button2->Show(); Sleep(3000); Button3->Show();
Leider macht er erst sleep und dann zeigt er beide buttons an.
kann man das verhindern, also dass erst button2, und nach 3 sekunden dann button3 angezeigt wird?
-
Das liegt an der MessageQueue, die wird sequenziell abgearbeitet. Du reagierst vermutlich auf irgendein GUI Ereignis (zB Button geklickt) und im Ereignishandler führst du dann deinen Code aus. Dieser Code macht eigentlich nichts weiteres, als Nachrichten in die Windows Message Queue einzfügen.
Nehmen wir mal an, dein Code sei die erste Nachricht in der Queue, die Nachricht wird aus der Queue entfernt und behandelt. Die nächste Nachricht kann aber erst dann behandelt werden, wenn die Behandlung der ersten abgeschlossen ist. Die Nachrichten, die die Buttons sichtbar machen, werden also erst nach Verlassen deiner Methode behandelt, und da sich der Sleep Aufruf in deiner Methode befindet wird er auch VOR den Nachrichten für die Buttons aufgerufen.
-
Hallo
Um das auf einfachste Art zum Laufen zu bekommen must du eben nur erzwingen das alle Messages gleich nach dem Sleep abgearbeitet werden.
Button2->Show(); Sleep(3000); Application->ProcessMessages(); // Messages sofort abarbeitem Button3->Show();
Unter Umständen wäre allerdings ein TTimer besser, denn das sleep läßt deine gesamte Anwendung einfrieren.
bis bald
akari
-
ah ok, danke schonmal für die info. kann man das dann irgentwie anders regeln, dass es nicht so auftritt wie hier erwähnt?
Edit: zu langsam. @ akari probiere ich mal aus.
danke akari funktioniert (musste es natürlich das ProcessMessages vor sleep setzen!). ich probiere es dann nochmal mit nem timer. was mir dann besser gefält nehme ich.
Also, danke euch allen für die große Hilfe!
-
Hallo
Ich weiße auf meinen Post hin, falls du den durch unser gleichzeitiges antworten übersehen hast.
bis bald
akari
-
ich hab ihn gesehen, deswegen hab ich meinen beitrag oben ja nochmal editiert!
dnake nochmal.
EDIT: schon wieder gleichzeitig geantwortet!
-
Ich persönlich halte ProcessMessages() für nen wilden Hack, den man so weit wie möglich vermeiden sollte. Du kannst direkt die Win32 API benutzen und mit SendMessage bzw. ShowWindow die Buttons anzeigen/verbergen:
// Button verbergen ::ShowWindow( Button2->Handle, SW_HIDE ); Sleep( 1000 ); // Button wieder anzeigen ::ShowWindow( Button3->Handle, SW_SHOW );
-
DocShoe schrieb:
Ich persönlich halte ProcessMessages() für nen wilden Hack, den man so weit wie möglich vermeiden sollte.
+1.
-
drummi schrieb:
Kolumbus schrieb:
Was wird es denn, wenn es fertig ist, was du da machst (dein Programm)?
es soll einfach dazu dienen, dass nachdem ein teil des codes ausgeführt wurde, der andere Teil erst nach 3 sekunden pause ausgeführt wird. (also das ist nicht sinn des programms!)
Wenn du nicht drüber reden möchtest, auch Ok.
-
wenn du es genau wissen möchtest ein einfaches verschlüsselungsprogramm.