AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Android: TThread

Ein Thema von greenmile · begonnen am 7. Nov 2016 · letzter Beitrag vom 8. Nov 2016
Antwort Antwort
Seite 1 von 3  1 23      
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

Android: TThread

  Alt 7. Nov 2016, 15:03
Irgendwie komme ich nicht so recht weiter. Ich benötige unter Android einige Threads. Die Beispiele, die ich auf Anhieb finde, sind entweder für XE5 oder enthalten nur 1-2 zeilen Code innerhalb des Threads. Ich erstelle also einen TThread, Vorfahre ist TThread und hier schon die erste Frage: Beim Inherited möchte er ein "CreateSuspended", das ist ja unter Android nicht erlaubt. Nutze ich die falsche Elternklasse? Ist TThread falsch?

Dann rufe ich im Thread Daten mit IdHttpClient ab, die wird vom Constructor vom Create erzeugt. Allerdings liefert die Teileweise müll oder der Zugriff darauf stürzt ab. Geht das nicht? Kann ich kein IdHttp im Thread verwenden?
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Android: TThread

  Alt 7. Nov 2016, 15:12
Ich erstelle also einen TThread, Vorfahre ist TThread und hier schon die erste Frage: Beim Inherited möchte er ein "CreateSuspended", das ist ja unter Android nicht erlaubt. Nutze ich die falsche Elternklasse? Ist TThread falsch?
Warum sollte das unter Android nicht gehen? Machen wir auch so (TBaseThread ist von TThread abgeleitet):


Delphi-Quellcode:
constructor TBaseThread.Create(...);
begin
  inherited Create(true);
end;
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Android: TThread

  Alt 7. Nov 2016, 15:22
Ja, dann läuft es (hatte ich bishger auch so), aber ...

Dann rufe ich im Thread Daten mit IdHttpClient ab, die wird vom Constructor vom Create erzeugt. Allerdings liefert die Teileweise müll oder der Zugriff darauf stürzt ab. Geht das nicht? Kann ich kein IdHttp im Thread verwenden?
Zum Beispiel gibt es für den Thread ein TIdHTttp, erstelle ich im Constructor mit DL := TIdHTTP.Create(nil);
Im .Execute kann ich aber über DL.Get nicht mehr drauf zugreifen, so als wenn die Variable ins Nirvana zeigt. DL ist natürlich im Thread Code declariert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: Android: TThread

  Alt 7. Nov 2016, 15:26
Es gibt Komponenten, die sind threadafine.
Der Constructor läuft im erstellenden Thread und das Execute dann in einem Eigenen.

Threadafine Komponenten können nur in dem Thread verwendet werden, wo sie erstellt wurden. Man muß sie dann also im Execute erstellen und feigeben.
Ich vermute einfach mal, dass das bei den Indy zutrifft.

Und dann gibt es Komponenten, die sind nicht nur nicht threadsave, sondern sie dürfen nur im Hauptthred verwendet werden.
Ich hoffe mal dass das hier nicht auf die Indy zutrifft.


Ansonsten wird sich bestimmt bald ein Indy-Profi finden (hier tummeln sich paar rum), der sich hier melden wird.
Wenn nicht, dann bleibt immernoch der direkte Weg zur Hilfe. http://www.indyproject.org/support.en.aspx
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Android: TThread

  Alt 7. Nov 2016, 15:29
Alles klar, ich checke das mal ... Danke.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Android: TThread

  Alt 7. Nov 2016, 15:32
Wir haben in unserer App das Indy auch im Thread laufen und das funktioniert ohne Probleme. Wir haben es auf einem DataModule und erstellen das jeweils im Execute des Threads.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Android: TThread

  Alt 7. Nov 2016, 16:43
Irgendwie komme ich nicht so recht weiter. Ich benötige unter Android einige Threads. Die Beispiele, die ich auf Anhieb finde, sind entweder für XE5 oder enthalten nur 1-2 zeilen Code innerhalb des Threads. Ich erstelle also einen TThread, Vorfahre ist TThread und hier schon die erste Frage: Beim Inherited möchte er ein "CreateSuspended", das ist ja unter Android nicht erlaubt. Nutze ich die falsche Elternklasse? Ist TThread falsch?

Dann rufe ich im Thread Daten mit IdHttpClient ab, die wird vom Constructor vom Create erzeugt. Allerdings liefert die Teileweise müll oder der Zugriff darauf stürzt ab. Geht das nicht? Kann ich kein IdHttp im Thread verwenden?
Da stellen sich mir direkt mehrere Fragen...

Warum manuell einen Thread erzeugen? Dann sowas
Warum nicht die System.Threading?
Warum Indy und nicht die neuen Http Routinen?

Mavarik
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Android: TThread

  Alt 7. Nov 2016, 16:50
Bitte gib Rückmeldung was es nun gewesen ist - Vor allem was für Probleme. Ich habe unter Android (und iOS) mehrere TThreads welche Indy-Komponenten (TidTcpClient ) benutzen die im Hauptthread erstellt wurden. Keinerlei Probleme.

Kannst du ein Minimalbeispiel erstellen?
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Android: TThread

  Alt 7. Nov 2016, 17:04
Dann rufe ich im Thread Daten mit IdHttpClient ab, die wird vom Constructor vom Create erzeugt. Allerdings liefert die Teileweise müll oder der Zugriff darauf stürzt ab. Geht das nicht? Kann ich kein IdHttp im Thread verwenden?
Prinzipiell würde ich mir mal als alternative zu TThread den TTask/ITask ansehen: http://docwiki.embarcadero.com/RADSt...amming_Library

Das von dir beschriebene Verhalten deutet eher auf unschöne/ungesicherte Zugriffe von Thread und Hauptthread auf die gleichen Ressourcen hin.
Kannst du mal ein Minibeispiel mit diesem Verhalten bereit stellen?

Update: Bitte bei dem Beispiel vom Emba zu TTask aufpassen: Showmessage ist hier denkbar schlecht. Dies sollte nie ohne Synchronize/Queue aufgerufen werden!

Geändert von SebastianZ ( 7. Nov 2016 um 17:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Android: TThread

  Alt 7. Nov 2016, 18:36
Suspended ist ohnehin finde ich keine wirklich schöne Variante. Entweder der Thread bekommt alle Daten gleich im Konstruktor oder wartet vor der Ausführung auf ein Signal. Letzteres kann man dann gleich zur mehrfachen Benutzung des gleichen Threads verwenden.

Die Parallel Programming Library mit ITask usw. bietet da aber wie SebastianZ schon geschrieben hat eine Menge an Funktionalität.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14: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