Hilfe bei Multi-Prozeß
-
Hallo,
Benötige Hilfe für ein Programm mit mehreren gleichzeitig laufende Prozeße (Thread). Jeder Prozeß darf auf einen bereitgestellten Speicher zugreifen.
Habe in dieser Richtung noch nicht gearbeitet.
Gruß Siegfried
-
Hallo
Tutorial gibts hier.
Wenn du dann präzißere Fragen hast, gibts auch präzißere Antworten.bis bald
akari
-
Hallo,
habe Link angesehen und Beispiel heruntergeladen.
Frage, wenn ich 3 Prozeße habe, muß ich pro Prozeß ein Thread-Objekt angelegen. In jedem Thread läuft dann eine eigenständige Prozedur ab. Meine Programm ist die oberste Ebene, in dem die 3 zusätzliche Thread laufen. Wie "Synchronize" funktioniert, muß ich noch herausfinden.
vielen Dank. Werde bei bedarf mich wieder melden.
Gruß Siegfried
-
Hallo,
habe das Beispiel aus dem Link als Projekt installiert.Unit2 ( Thread )
void __fastcall TMyThread::Execute() { //---- Hier den Thread-Code plazieren---- FCount = 1; do { Synchronize(GuiElements); FCount++; } while (FCount <= 50000); } //---------------------------------------------------------------------------
Unit1 (Form)
void __fastcall TForm1::DeleteThread(TObject* Sender) { FNewThread->Terminate(); //Der Thread wird terminiert und freigegeben (FreeOnTerminate). }
Habe mit Debug festgestellt, das wenn in Unit 2 der FCount abgelaufen ist, in Unit 1 ein Delete des Thread stattfindet.
Frage: startet man jedesmal einen Thread für das abarbeiten einer Routine und beendet man den Thread danach, oder gibt es auch die Möglichkeit, das der gestartete Thread auf eine Information wartet und dann die Routine ausführt?Gruß Siegfried
-
Ich verstehe nicht so recht, worauf Du hinauswillst...
Du kannst einen Thread 'suspended' erstellen (siehe Konstruktor TThread). Dieser wird dann zwar erzeugt, aber noch nicht ausgeführt. Das macht man dann mittels ->Resume (geht allerdings nicht von innerhalb des Threads selbst).
Ob ein Thread manuell gelöscht werden muß, oder er automatisch gelöscht wird, kannst Du mittels FreeOnTerminate einstellen.
Wenn ein Thread einmal abgearbeitet ist, kann man nicht erneut starten -> ein neuer Thread muß her.
Hilft das weiter?
-
Hallo,
Diese Zeile
Wenn ein Thread einmal abgearbeitet ist, kann man nicht erneut starten -> ein neuer Thread muß her.
ist für mich sehr wichtig. Muß jetzt überlegen, wie ich mein Projekt aufbaue.
Hatte die Hoffnung, das eine Art Schleife möglich ist. Möchte die Ein-Ausgabe über den Com-Port immer (Schleife ?) aktuell halten. Dazu einen eignen Thread nutzen
Gruß Siegfried.
-
Du kannst doch in den Thread eine Schleife einbauen
while(!Terminated) { // DoSomeThing }
Du kannst diesen Thread dann auch ganz normal beenden oder pausieren lassen.