AGB  ·  Datenschutz  ·  Impressum  







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

Kamera App Thread Ftp Uplaod

Ein Thema von oakley · begonnen am 3. Mai 2022 · letzter Beitrag vom 6. Mai 2022
Antwort Antwort
Seite 1 von 2  1 2      
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#1

Kamera App Thread Ftp Uplaod

  Alt 3. Mai 2022, 17:07
Hallo zusammen,

ich habe eine kleine Kamera App für Android auf Basis der Camera for Android Komponente von Winsoft gemacht.
Nach dem ich ein Bild gemacht habe wird selbiges gespeichert und per FTP auf einen Server geladen.
Funktioniert alles bis auf die Tatsache, dass während der Uploads natürlich die GUI blockiert ist.

Ich kenne mich mit Treading nicht aus und wollte fragen wie ich den FTP Upload in einen geeigneten Thread packe, der die GUI nicht blockiert.

In der Codelib habe ein zwar einen entsprechenden Eintrag gefunden, der aber nicht das gewünschte Ergebnis bringt.

LG

Mirko
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Kamera App Thread Ftp Uplaod

  Alt 3. Mai 2022, 18:04
Hi Mirko,
muss es FTP sein, da kann jeder Deinen Usernamen mitsamt Passwort im Klartext lesen und auch die Daten lassen sich ohne Probleme mitlesen.
Lässt der Server kein FTPs (FTP over SSL) oder SFTP (SecureFTP) zu?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kamera App Thread Ftp Uplaod

  Alt 3. Mai 2022, 19:44
Die Frage, ob es FTP sein muss ist zwar erlaubt, führt aber vom Thema weg.
Man kann das Hochladen per FTP vermutlich in einen Thread packen oder TTask
bemühen, was die Sache evtl. vereinfacht gegenüber der klassischen Thread Programmierung.

Wichtig dabei ist, dass aus einem Thread keine direkten GUI Aufrufe geben darf, da es sonst
irgendwann zufällig Bumm macht!

Ein klassischer Thread wäre so zu programmieren:

Delphi-Quellcode:
uses
  Classes;

type
  TMyThread = class(TThread)
  public
    // Hier muss alles rein, was nebenläufig sein soll
    procedure Execute; override;
  end;

var
  MyThread: TMyThread;

procedure TMyThread.Execute;
begin
  // wenn man was "endlos" im Hintergrund abarbeiten will
  while not Terminated do
  begin
  end;
end;

begin
  MyThread := TMyThread.Create;
  MyThread.FreeOnTerminate := true; // das ggf. im überschriebenen Constructor
                                    // des Threads auf true setzen
  // irgendwas im Vordergrund tun, der Thread wurde bereits gestartet

  // und hier die Schleife im Thread stoppen, der wird dann beendet und freigegeben
  MyThread.Terminate;
Nur so als Beispiel...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#4

AW: Kamera App Thread Ftp Uplaod

  Alt 4. Mai 2022, 12:50
Danke ich denke damit komme ich schonmal weiter.

Das while not Terminated do begin end; wäre dann mein FTP Upload und dann meine Kamera Vorschau darunter nach dem // irgendwas im Vordergrund tun, der Thread wurde bereits gestartet .

Ich versuche das mal.

@Klaus: Ja der Server lässt sftp zu aber testweise habe ich das erstmal deaktiviert weil er mit einen Fehler beim Upload gab "traffic needs to be encrypted" oder sowas.
Die Verbindung wurde aber hergestellt.

LG

Mirko

Geändert von oakley ( 4. Mai 2022 um 12:51 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#5

AW: Kamera App Thread Ftp Uplaod

  Alt 4. Mai 2022, 18:58
Könntest Du mir bitte noch sagen, wie sich das mit dem Execute verhält?

Delphi-Quellcode:
type
  TMyThread = class(TThread)
  public
    ----> Hier habe ich meine FTPUpload Prozedur eingefügt
    procedure FTPUpload;
    procedure Execute; override;
  end;

var
  MyThread: TMyThread;

procedure TMyThread.Execute;
begin
  FTPUpload; //beim Ausführen des Threads soll die Uploadfunktion ausgeführt werden.
  // wenn man was "endlos" im Hintergrund abarbeiten will
  ---- > ich will nichts endlos ausführen
end;
Wenn ich auf den Auslöser drücke wird ein JPG erzeugt (fname = Dateiname):
TFile.WriteAllBytes(TPath.Combine(TPath.GetPublicP ath, fname + '.jpg'), Data);

Und direkt danach habe ich den Code:

Delphi-Quellcode:
  MyThread := TMyThread.Create;
  MyThread.FreeOnTerminate := true;
  MyThread.Terminate;
Wo wird MyThread.Execute aufgerufen? Passiert das automatisch onCreate?

LG

Mirko

Geändert von oakley ( 4. Mai 2022 um 19:01 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Kamera App Thread Ftp Uplaod

  Alt 5. Mai 2022, 08:52
.. der Thread startet sofort, wenn der Thread nicht mit dem CreateSuspended = true Parameter aufgerufen wird.

MyThread.Terminate ist meines Wissens nicht notwendig, da der Thread automatisch terminiert wenn der Executeblock abgearbeitet wurde.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Kamera App Thread Ftp Uplaod

  Alt 5. Mai 2022, 09:09
Wenn du einen ganz einfachen Thread haben möchtest, der nicht viel mehr als den Upload machen solll, dann kannst du auch einen anonymen Thread verwenden:
Delphi-Quellcode:
  TThread.CreateAnonymousThread(procedure
  begin
    FTPUpload;
  end).Start();
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Kamera App Thread Ftp Uplaod

  Alt 5. Mai 2022, 09:34
Wäre ggf. auch eine gute Anwendung für System.Threading?

Delphi-Quellcode:
TTask.Run(
  procedure
  begin
    FTPUpload;
  end);
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kamera App Thread Ftp Uplaod

  Alt 5. Mai 2022, 12:31
Ich benutze fast immer die Unit AnonThread.pas aus den Delphi samples. Wie hier beschrieben:
https://community.embarcadero.com/bl...tification-127
Delphi-Quellcode:

  //TAnonymousThread findet sich in anonthread.pas in den Delphi Samples.
  TAnonymousThread<TMyResultRecord>.create(
  Function:TMyResultRecord// Alles was parallel im hintergrund passieren soll
  Begin
    Result.worked := false;
    Result.Filename := LastSavedFile;
    DoFTPUpload(Result.Filename);
    Result.worked := true;
  End
  ,
  Procedure (res:TMyResultRecord)// Was passieren soll wenn der Thread fertig ist
  Begin
    if Res.Worked then
      ShowSyncedMessage('Upload von '+ res.filename+' erfolgreich!'  );
  End
  ,

  Procedure (e:Exception) // Was passieren soll wenn der Thread mit einer Exception endete.
  Begin
    ShowSyncedMessage( 'FTP UPLOAD Thread:'+e.message );
  End
  );
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#10

AW: Kamera App Thread Ftp Uplaod

  Alt 5. Mai 2022, 17:22
.. der Thread startet sofort, wenn der Thread nicht mit dem CreateSuspended = true Parameter aufgerufen wird.

MyThread.Terminate ist meines Wissens nicht notwendig, da der Thread automatisch terminiert wenn der Executeblock abgearbeitet wurde.

Grüße
Klaus
Richtig. Das hab' ich nur zur Illustration eingebaut wie man was länger laufendes mit Schleife im Thread behandeln kann.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:16 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