Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread startet execute nicht (https://www.delphipraxis.net/174973-thread-startet-execute-nicht.html)

Murkas 25. Mai 2013 22:56

AW: Thread startet execute nicht
 
Ich habe versucht über showmessage und über ein memo auf Form1 eine Nachricht anzuzeigen. Beides kommt nicht zu stande.

Mir ist aber dabei was Interessantes aufgefallen. Wenn ich den Code ändere, dann wird die execute in einigen, nicht einfach reproduzierbaren Fällen ausgeführt.

Sir Rufo 25. Mai 2013 23:14

AW: Thread startet execute nicht
 
Ein Zugriff aus dem Thread Kontext auf die VCL oder auch ShowMessage ist ein absolutes NoGo.

Sowas nur synchronisiert machen.

Zum Thema Threads solltest du dir ein paar Tutorials ansehen, denn das ist nicht trivial.

Murkas 25. Mai 2013 23:18

AW: Thread startet execute nicht
 
Ich habe mir schon einige durchgelesen, jedoch wüsste ich nicht, wie mir das Synchroniesieren hier helfen sollte. Und soo schwer sind Threads mit TThread ja nun auch nicht.. naja.. also wenn es denn dann funktioniert :?

DelTurbo 26. Mai 2013 03:41

AW: Thread startet execute nicht
 
Zitat:

Zitat von Sir Rufo (Beitrag 1216392)
Ein Zugriff aus dem Thread Kontext auf die VCL oder auch ShowMessage ist ein absolutes NoGo.

Damit hat er vollkommen recht. Das ist das erste was du ändern musst. Wenn nicht anders, mach eine Konsole mit rein, und arbeite mit WriteLn um auf die schnelle eine Ausgabe zu machen. Dann brauchst du, meines Wissens, erst mal nicht syncen.

Uwe Raabe 26. Mai 2013 08:04

AW: Thread startet execute nicht
 
Zitat:

Zitat von Murkas (Beitrag 1216391)
Ich habe versucht über showmessage und über ein memo auf Form1 eine Nachricht anzuzeigen. Beides kommt nicht zu stande.

Daraus kannst du aber nur schließen, daß die erwarteten Auswirkungen dieser beiden Aktionen nicht eingetreten sind. Das sagt überhaupt nichts darüber aus, ob das Execute ausgeführt wurde oder nicht. Der Titel führt als jeden, der dir helfen will, gewaltig in die Irre. Realistischer wäre: ShowMessage und Ändern von Memo-Inhalten funktionieren nicht im Thread.

Es ist hier schon mehrfach deutlich gemacht worden, daß Zugriffe auf die VCL (dazu gehört Showmessage und das Manipulieren eines Memos) aus einem Thread heraus nur eingeschränkt, wenn überhaupt, funktionieren. Deine Beobachtungen bestätigen das doch sehr anschaulich.

Wenn dir also schon mehrere Leute sagen, was du falsch machst, dann halte dich doch bitte zunächst mal an diese gut gemeinten Ratschläge!

Murkas 26. Mai 2013 13:05

AW: Thread startet execute nicht
 
Ok, ich denke ich habe nun verstanden, was mein Fehler ist. Ich habe einfach mal über die execute Prozedur eine synchronisierte Prozedur gestartet, die mir eine Nachricht anzeigt. Das heist, dass die execute doch gestartet wird. Ich hatte einfach die Auswirkung unterschätzt, die entsteht, wenn man etwas unsynchronisiert anzeigen möchte. Demzufolge wäre dann eine andere Threadüberschrift wirklich hilfreich gewesen, ich bin aber davon ausgegangen, dass die execute einfach nicht gestartet wird. Im Ergebnis muss ich also meinen Fehler im Quellcode des Threads suchen.

Eine andere Frage, die bei mir da grade so aufkommt, ist noch: Warum akzeptiert
Delphi-Quellcode:
synchronize()
keine Prozeduren mit Parametern?

DeddyH 26. Mai 2013 13:09

AW: Thread startet execute nicht
 
Weil TThreadMethod eine parameterlose Methode ist. Du kannst aber doch eine solche synchronisieren, innerhalb derer Du dann einfach eine Methode mit Parametern aufrufst.

[edit] Vielleicht war das jetzt etwas schwer verständlich, daher ein Beispiel:
Delphi-Quellcode:
...
Synchronize(Parameterlos);
...

procedure TDeinThread.Parameterlos;
begin
  MachIrgendwas(FPrivatesFeld1, FPrivatesFeld2);
end;

procedure TDeinThread.MachIrgendwas(Param1, Param2: integer);
begin
  //Code
end;
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz