![]() |
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. |
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. |
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 :?
|
AW: Thread startet execute nicht
Zitat:
|
AW: Thread startet execute nicht
Zitat:
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! |
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:
keine Prozeduren mit Parametern?
synchronize()
|
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:
[/edit]
...
Synchronize(Parameterlos); ... procedure TDeinThread.Parameterlos; begin MachIrgendwas(FPrivatesFeld1, FPrivatesFeld2); end; procedure TDeinThread.MachIrgendwas(Param1, Param2: integer); begin //Code end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz