Threads und Problem mit Echtzeit-Aktualisierung
-
Als erstes, Entschuldigung für den grauenhaften Titel, aber ich weiß net, wie ich mein Problem nennen soll.
Ich will gerade mit dem C++ Builder n Programm schreiben, was das Verhalten "Kugeln" (2D) simuliert.
Ich hab dazu die Klasse "Kugel" und die Klasse "Simulation". Die zweite Klasse verwaltet quasi alle Kugeln, erzeugt neue u.s.w.. Jetzt will ich mit einem Knopfdruck die Simulation starten. Dazu habe ich eine Funktion, die ganz grob wie folgt aussieht.
Simulation::run(TImage image) int tick; // Damit ich später die Geschwindigkeit anpassen kann //... { for(int time = 0; time <= 200, time ++) { // Hier wird unter anderem neue Positionen berechnet und auf der TImage-Oberfläche gedruckt Sleep(tick); } }
Das Problem; wenn ich über einen Button die Funktion starte, dann rechnet das Programm, bis die Schleife verlassen wurde. Das ist natürlich net der Plan gewesen, statt dessen soll es automatisch die TImage-Oberfläche aktualisieren.
Gibt es da eine Möglichkeit?
Der nächste Schritt wäre dann, Die Funktion mit einem Button zu starten und bis zum nächsten Drücken eines Knopfes laufen zu lassen. Hab es gerade ganz kurz mit der boost/thread.hpp - libary versucht aber da spuckt er Fehler aus. Wie kann man das realisieren?
Danke für die Hilfe im Voraus
-
Hallo
Als einfachste Lösung schlage ich die Verwendung von TTimer vor. Dann brauchst du kein Sleep mehr, die Intervalle sind in (milli-) Sekunden unabhängig von der Prozessorleistung und du must nichts synchronisieren.
Ansonsten brauchst du keine Fremdbibliothek für echte Threads, es gibt TThread. Damit kannst du noch präziser arbeiten, must aber die finale Grafikausgabe jedes Schrittes mit GUI-Thread synchronisieren.
Beide Klassen sollten im Tutorial hier im Forum näher erklärt werden.
bis bald
Stefan
-
Danke für die Antwort.
Kannst du mir ein Beispiel für die Anwendung von TTimer geben? Ich bin mit C++ noch net so fit, sollte laut Uni-Lehrplan momentan artig printf und scanf üben.
Die Verwendung von den TThread-Objekten leuchtet mir eher ein, versuche gerade mal, ein Thread zu erstellen...
-
Hallo
Ein TTimer ist eine einfache Komponente. Einfach auf Form setzten, Intervall in Millisekunden zuweisen und die entsprechende Eventmethode wie bei einem Button zuweisen. Steht alles in der Builder-Hilfe.
TThread brauchst schon mehr Erfahrung. Du findest eine Einführung in dem schon erwähnten Tutorial hier im Forum.
Wenn du noch mit printf und scanf beschäftigt bist, solltest du das nicht gleich mit C++, VCL und Threads mischen. Die Komplexität ist viel größer.
bis bald
akari
-
Ich weiß zwar net, wieso ich der festen Meinung war, dass ich dir geantwortet habe, aber gut,... Danke für den Link.
Hab das Tutorial selber irgendwie net gefunden, werde posten, obs geklappt hat.