AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Thread.Queue in verschachtelten Threads [unter Android]
Thema durchsuchen
Ansicht
Themen-Optionen

Thread.Queue in verschachtelten Threads [unter Android]

Ein Thema von Rollo62 · begonnen am 30. Mär 2016 · letzter Beitrag vom 30. Mär 2016
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#1

Thread.Queue in verschachtelten Threads [unter Android]

  Alt 30. Mär 2016, 12:34
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 30. Mär 2016, 12:41
Ja, wird es auch ... aber es wird eben in die Queue geschrieben und somit irgendwann abgearbeitet.

Was machst du dann mit der übergebenen 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 TBitmap und Threads vertragen sich unter Delphi nicht ...

(Was unter FMX und Windows noch halbwegs funktioniert fliegt dir unter Android auf die Füße)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (30. Mär 2016 um 12:44 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 30. Mär 2016, 12:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 30. Mär 2016, 12:45
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!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 30. Mär 2016, 17:34
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
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