Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Thread.Queue in verschachtelten Threads [unter Android] (https://www.delphipraxis.net/188712-thread-queue-verschachtelten-threads-%5Bunter-android%5D.html)

Rollo62 30. Mär 2016 11:34

Thread.Queue in verschachtelten Threads [unter Android]
 
Hallo zusammen,

ich habe mal eine Frage zu Treads.

Ich bekomme beim Aufruf eines Konstrukts wie unten beschrieben unter Android ein Segmentation Fault.

Wenn eine Prozedur im Thread oder auch von einem tiefer verschachtelten Thread aufgerufen wird,
und dann mit Thread.Queue zum MainThread synchronisiert wird dann sollte das doch in JEDEM Fall korrekt funktionieren.
Deadlocks o.ä. gibt es dabei doch nicht, oder etwa doch ?

Kann es sein das dieses Bitmap im Thread auch einen anderen Kontext bekommt als im MainThread, und
das es deshalb vielleicht kracht ?
Jedenfalls kommt das Segmantation Fault wenn ich aus der Routine irgend etwas im UI Thread anfasse.

Delphi-Quellcode:
procedure TDiesIstEinTread.EvImThreadContext_KannAberAuchTieferVerschachteltSein(Image: TBitmap);
begin
  if Assigned(procResult) then
  begin
    TThread.Queue(nil,
                  procedure
                  begin
                    procResult( Image ); // Dies sollte doch immer im MainThread ausgefuehrt werden,
                                          // Egal wie tief verschachtelt ?
                  end
                 );
  end;
end;
Rollo

Sir Rufo 30. Mär 2016 11:41

AW: Thread.Queue in verschachtelten Threads [unter Android]
 
Ja, wird es auch ... aber es wird eben in die Queue geschrieben und somit irgendwann abgearbeitet.

Was machst du dann mit der übergebenen
Delphi-Quellcode:
Image
Instanz? Schmeisst du die evtl. direkt nach dem Aufruf aus dem Speicher? ;)

Und so ganz nebenbei ... wie kommst du an diese Bitmap-Instanz ... erzeugst und bearbeitest du diese innerhalb eines Threads?

Dann verabschiede dich davon ... denn
Delphi-Quellcode:
TBitmap
und Threads vertragen sich unter Delphi nicht ...

(Was unter FMX und Windows noch halbwegs funktioniert fliegt dir unter Android auf die Füße)

Rollo62 30. Mär 2016 11:43

AW: Thread.Queue in verschachtelten Threads [unter Android]
 
Das Verarbeiten des Bitmaps funktioniert auch noch, es wird in eine andere Variable gespeichert.
Aber ich möchte noch verhindern das während des Speicherns jemand eine Taste drückt.

Sobald ich irgendetwas sonst anfasse, oder anzeige gibt es Segmentation Fault.

UPDATE:
Als Beispiel ein einfaches Flag in der form setzen, so das dies andere Aktionen blockiert ==> Segmentation Fault

Wenn ich nicht besonderes anfasse geht es gut


Rollo

Sir Rufo 30. Mär 2016 11:45

AW: Thread.Queue in verschachtelten Threads [unter Android]
 
Zitat:

Zitat von Rollo62 (Beitrag 1334165)
Das Verarbeiten des Bitmaps funktioniert auch noch, es wird in eine andere Variable gespeichert.

Das Speichern einer Instanz-Referenz in einer anderen Variablen führt noch nicht zu einer neuen Instanz!

Rollo62 30. Mär 2016 16:34

AW: Thread.Queue in verschachtelten Threads [unter Android]
 
Hallo Sir Rufo,

ja, in der Prozedur habe das mit Bitmap.Assign(bmp); zugeordnet, und dann als File gespeichert.
Das funktionierte alles bisher korrekt.

Erst danach passierte etwas, beim Zugriff.

Aber es scheint nicht am Thred.Queue zu liegen, darum gings mir ja.

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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