Forum: Programmieren allgemein
Delphi
by himitsu,
4. Mai 2018
Ich nenne sowas fahrlässig.
MyThread.FreeOnTerminate := True;
MyThread.Start;
...
if TerminateProcess(MyThread.Handle, 0) then MyThread.Terminate;
Ab "..." darf von außen niewieder niemals nicht auf diese Variable zugegriffen werden!:!:
Denn wenn der Thread endet, wird das Objekt automatische gelöscht und ein Zugriff ist nicht mehr möglich.
Forum: Programmieren allgemein
Delphi
by himitsu,
3. Mai 2018
Application.Terminated in die Abbruchbedingung sollte halt mit rein, dann läßt es sich beenden, genau so, wie man es auch bei Threads mit Self.Terminated macht.
Forum: Programmieren allgemein
Delphi
by himitsu,
2. Mai 2018
Das war gerade DAS Antibeispiel, wo man auch im Code gleich sieht, dass es hängen muß. :angle2:
Wieso?
> Mach was und wenn fertig gib es mir.
Oder der Entwickler muß dem Hauptthread regelmäßig die Möglichkeit geben etwas anderes tun zu können.
Forum: Programmieren allgemein
Delphi
by himitsu,
2. Mai 2018
@p80286: Du hast seinen Code und diese Aussage falsch verstanden.
Diese Schleife hat nichts mit dem Thread zu tun.
Sie soll nur warten und dafür ist "diese" Schleife garnicht nötig.
Einfache Abänderung, mit dem selben Ergebnis: Ein Event und WaitFor statt dieser Schleife.
Er kann bei sich auch das Sleep weglassen. Dann ist der Code kürzer, das Warten verbrät 100% CPU, aber sonst ändert...
Forum: Programmieren allgemein
Delphi
by himitsu,
2. Mai 2018
Oder seine Methode ist die Falsche/Unpassende.
Im Thread oder sonstwo was machen, im Hauptthread darauf warten, aber dem Hauptthread Rechenleistung abgeben. (ProcessMessages)
Oder im Thread was machen, im Hauptthread nicht warten und bei ThreadEnde den Hauptthread benachrichtigen (Callback, Message oder Dergleichen),
bzw. im Hauptthread regelmäßig schauen ob fertig und dann das Ergebnis...
Forum: Programmieren allgemein
Delphi
by himitsu,
2. Mai 2018
Dein Hauptthread besteht ausschließlich aus dieser Zeil repeat sleep(5) until not threadrun;
und nun überlege mal ganz genau was da gemacht wird und wieso es da hängen muß.
Und sollte es mal beim Free knallen, dann bleibt es auch gleich für immer hängen.