Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Threading unter Seattle (https://www.delphipraxis.net/187972-ios-threading-unter-seattle.html)

junglist 20. Jan 2016 12:29

iOS Threading unter Seattle
 
Mal wieder Hallo zusammen :wink:

Seit Seattle (also nicht iOS 9.2 verantwortlich denke ich, weil es mit XE8 funktioniert hat) kann ich unter iOS Threads nicht mehr gescheit einsetzen.

So in etwa wird die Prozedur aufgerufen, um einen Webservice zu konsumieren und dann die Daten in eine DB zu packen.
Code:
procedure Form1.Button1Click(Sender:TObject);
var
cn:=Connection;
begin
cn.loadData('thisnthat')
end;
In "loadData" sind dann der WebService und DB-Zeug in einem
Code:
TThread.CreateAnonymousThread(procedure()
begin.
  //Webservice und DB-Zeuch
end).Start;
drinnen.

Ansonsten ist nur TfgActivityDialog noch drin.
Ich habe mal versucht die Sachen in der Prozedur auszukommentieren, egal ob ich jetzt den WebService, DB-Zeug oder den ActivityDialog auskommentiert habe, freezet die App immer nach dem Thread.

Ich weiss leider nicht mehr weiter, wenn ihr mehr Informationen braucht nur fragen.
Vielen Dank :)

Sir Rufo 20. Jan 2016 13:10

AW: iOS Threading unter Seattle
 
Und der
Delphi-Quellcode:
TfgActivitiyDialog
kann das nicht auch verursachen?

junglist 20. Jan 2016 13:36

AW: iOS Threading unter Seattle
 
Oh man.. Ich habe zwar oben schon geschrieben, dass ich auch schon versucht habe diesen auszukommentieren, aber da ich ja n Vollhorst bin hab ich eine Zeile vergessen.. :oops:

Ja, scheint da dran zu liegen.. Tut mir jetzt leid hier überhaupt n Thread eröffnet zu haben, manchmal entgehen einem ein paar Sachen wenn man 1-2 Tage am gleichen Problem arbeitet :lol:



Jetzt ist mein Problem nur noch dass ich eine Anzeige brauche um dem User zu erklären, dass eine Operation ausgeführt die etwas länger benötigt, das TfgActivityDialog war bis jetzt das einzige das ich kannte.. Was hätte ich sonst noch für Optionen?

Sir Rufo 20. Jan 2016 15:17

AW: iOS Threading unter Seattle
 
Du baust dir eine Klasse, die diese Tasks verwaltet.

Nur mal ganz grob skizziert:
Delphi-Quellcode:
type
  IReportProgress = interface
    procedure Progress( PercentProgress : Integer ); overload;
    procedure Progress( PercentProgress : Integer; const Info : string ); overload;
  end;

  TBackgroundRunner = class
  public
    // Diese Methoden werden nacheinander in einem Task abgearbeitet
    // Beim Beenden wird der Callback ausgeführt
    // Im Callback-Argument liegt bei einer aufgetretenen Exception die Exception
    procedure Execute( AProc : TProc; OnFinishCallback : TProc<TObject> ); overload;
    // Diese Methode kann über den Fortschritt berichten
    // Beim Aufruf müssen wir also eine ProgressInstanz mitgeben, die dann das
    // ProgressDialog-Fenster benachrichtigt
    procedure Execute( AProc : TProc<IReportProgress>; OnFinishCallback : TProc<TObject> ); overload;
    property OnStart : TNotifyEvent; // Ein Progress-Dialogfenster anzeigen
    property OnFinish: TNotifyEvent; // Das Progress-Dialogfenster wieder ausblenden
  end;


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