AGB  ·  Datenschutz  ·  Impressum  







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

TMemo (FireMonkey)

Ein Thema von value is NULL · begonnen am 28. Jan 2014 · letzter Beitrag vom 28. Jan 2014
Antwort Antwort
Der schöne Günther

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

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 10:01
Ja, ein Wunder das das Ding sich nicht aufhängt sondern tapfer weiterläuft. Aus einem Thread heraus - wie immer - nicht direkt die Oberfläche (im Hauptthread) anfassen! Wenn ich das bei mir tue, flackert es auch wie wild.

Wenn du das Anfügen in der Memo wieder mit TThread.Queue(..) oder TThread.Synchronize(..) in den Hauptthread verlagerst flackert nichts und alles läuft schön flüssig durch.
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#2

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 10:09
Mann Mann Mann....
DANKE!

Vermutlich blöde Frage, habe mich mit Threads nie so auseinander gesetzt.
Ich benutze dies hier zum starten meines Threads

Delphi-Quellcode:

Function StartThread(pFunction : TFNThreadStartRoutine; iPriority : Integer = Thread_Priority_Normal; iStartFlag : Integer = 0) : THandle;
var
  ThreadID : DWORD;
begin
  Result := CreateThread(nil, 0, pFunction, nil, iStartFlag, ThreadID);
  if Result <> Null then
  SetThreadPriority(Result, iPriority);
end;

...

ithread := StartThread(@importThread);
und aus "importhread" rufe ich dann die Funktionen auf. Wie könnte sowas aussehen mit Synchronize?

Danke jetzt schon mal und liebe Grüße!
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#3

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 10:34
vergiss es... ich lese mich selbst da ein

Danke auf jeden Fall!
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 11:33
In der VCL verhält es sich übrigens genauso. Ich glaube da wäre das Programm schon längst aufgehangen. Ein Wunder, das das überhaupt funktioniert hat

Hinweis: Ich hatte im Delphi-Land persönlich noch nie einen Grund, Threads hart über die Windows-API zu regeln. Es sei denn, man steht auf körperliche Schmerzen. Ich finde den Weg über die TThread -Klasse (in System.Classes) eigentlich sehr, sehr angenehm gemacht. Ein gutes Tutorial habe ich zwar nicht zur Hand, aber viel steckt da auch nicht hinter.
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#5

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 11:46
Ich hab mir da jetzt einiges angesehen werde da aber nicht unbedingt schlau :/

zB

Delphi-Quellcode:
type
  TBinFertig = procedure(const Content: String) of object;
 
  TMyOwnThread = class(TThread)
  private
    FBinFertig: TBinFertig;
    procedure SyncBinFertig;
  public
    property BinFertig: TBinFertig read FBinFertig write FBinFertig;
  end;
 
implementation
 
procedure TMyOwnThread.SyncBinFertig;
begin
  if Assigned(FBinFertig)
    then FBinFertig(DasIstDerInhaltDerWebseite);
end;
 
procedure TMyOwnThread.Execute;
begin
  try
    // Download der Seite ...
 
    // Synchronisieren
    Synchronize(SyncBinFertig);
  except
    on e: exception do begin
      // mache hier irgendetwas mit dem Fehler.
    end;
  end;
end;
Wie würde ich hier zB meine "write" funktion einbauen ? Synchronize kann ja nicht mit Parametern umgehen soviel ich weiß oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 11:51
Zitat:
if Result <> Null then
Das ist immer ungleich NULL.

Du meintest wohl eher NIL, oder besser noch Assigned.


PS: TThread auch das Execute schon mit einem Try-Except abgesichert, da das selten jemand abfängt und wenn eine Exception in irgendinem Thread bis zur Wurzel durchrauscht, dann schießt Windows die Anwendung komplett ab.
TThread synchronisiert die letzten Events auch schon.

OnTerminate anhängen oder DoTerminate überschreiben und darin hat man im FatalException dann die durchgerauschte Exception vom Execute.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Jan 2014 um 11:57 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: TMemo (FireMonkey)

  Alt 28. Jan 2014, 12:07
Wie schon gesagt, die Arbeit mit dem SyncBinFertig brauchst du dir auch nicht mehr zu machen, genau dazu ist schon das OnTerminate -Ereignis da.

Wir können das alles gerne nochmal Schritt für Schritt durchgehen, aber das hat ja dann mit dem (eigentlich gelösten) Problem mit der flackernden Memo nichts mehr zu tun. Da würde ich dann ein neues Thema vorschlagen.
  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 09:31 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