AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Absolute DB - Anwendung hängt trotz Thread Zugriff
Thema durchsuchen
Ansicht
Themen-Optionen

Absolute DB - Anwendung hängt trotz Thread Zugriff

Ein Thema von moelski · begonnen am 14. Apr 2009 · letzter Beitrag vom 26. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Absolute DB - Anwendung hängt trotz Thread Zugriff

  Alt 14. Apr 2009, 20:01
Datenbank: Absolute DB • Version: 6.02 • Zugriff über: SQL
Moin !

Ich habe da eine kleine Demo Anwendung. Ziel ist es lediglich, Daten mittels Thread in einer Datenbank abzulegen bzw. via Thread die Daten zu lesen. Eben um die Anwendung nicht zu blocken.

Hier ist die Demo mit Quellcode und Video.
http://www.logview.info/Downloads/TestHanging.zip

Grundlegend funzt das ja auch alles ganz gut. Aber es kommt zu Problemen wenn man (während der Thread die Daten in der DB ablegt) im DBGrid oder DB Davigator etwas rumklickt (andere Datensätze selektiert). Nach ca. 8-10 mal rumklicken hängt auf mal die Hauptanwendung so lange bis der Thread beendet ist mit seinem Bild speichern.

Die Bedienung der Demo ist wie folgt:
- "Load Image ->" anklicken
- "Save Image to DB" anklicken
Jetzt fängt ein neuer Thread an, die Daten in die DB zu schaufeln.
So und nun halt am besten im DBGrid ein bisschen auf den IDs rumklicken (erste Spalte). Und wie geschrieben - nach 8-10 mal rumklicken hängt die Anwendung (die Uhr und der Counter in der Caption des Formulars stehen still).
Wenn derThread beendet ist, geht alles wieder gewohnte Bahnen.

Ich habe extra mal ein Video erzeugt weil man das nicht sonderlich gut beschreiben kann... (ist mit in dem File enthalten).

Kann mir das jemand erklären und mir auch ggf. sagen was man da machen kann? Denn ansonsten ist das nur die halbe Miete. Die Daten würden zwar per Thread geschrieben, aber wenn dann die Anwendung später doch wieder hängt ist das irgendwie für die Katz ...

[edit=Admin]Damit der Thread leichter auffindbar ist, Tippfehler im Titel korrigiert. Mfg, Daniel[/edit]
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 14. Apr 2009, 21:08
Ist Absolute DB überhaupt MultiThreading-Fähig?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 14. Apr 2009, 21:11
Ja.
Die Urdemo ist nämlich von dessen Support.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 14. Apr 2009, 21:16
Kannst du dem Hersteller dieses Demo zusenden? Dort sind auch nur Menschen am Arbeiten und u.U. liegt ja hier ein Bug der Komponenten vor.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 14. Apr 2009, 21:18
Habe ich natürlich schon getan.
Ich dachte nur das es ggf. generell ein bekanntes Problem dieser Natur gibt.

Habe aber auch noch kein Feedback vom Hersteller.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 15. Apr 2009, 08:28
Moin !

So Nachricht vom Hersteller bekommen. Der Spezi ist erst am 20sten April wieder da. Vorher keine Info möglich.

Wenn also hier jemand eine Idee hat was das sein könnte ...
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#7

Re: Absolue DB - Anwendung hängt trotz Thread Zugriff

  Alt 16. Apr 2009, 11:27
In TBlobThread.Execute wird direkt auf Elemente der VCL zugegriffen.
frmMain.Image1.Picture.Bitmap.SaveToStream(BlobStream); Das ist nicht zulässig und kann sogar zum Absturz der Anwendung führen.
Und so etwas geht im Thread überhaupt nicht:
ShowMessage('SaveRichEditToDB Operation completed'); Übergib dem Thread beim Erzeugen statt dessen einen Stream (z.B. einen TMemoryStream oder TFileStream) der die zu speichernden Daten enthält oder die zu lesenden Daten aufnimmt. Das hat auch den Vorteil, dass die Implementierung im TBlobThread nicht von der Art der Daten abhängt.
Wärend der TBlobThread mit dem Stream arbeitet darf der Hauptthread natürlich nicht auf den Stream zugreifen.
FreeOnTerminate ist auch keine so gute Idee, da eine Überprüfung ob die Aktion noch läuft, so nicht möglich ist.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Absolute DB - Anwendung hängt trotz Thread Zugriff

  Alt 16. Apr 2009, 12:49
Moin !

Ok ich habe nun den Thread umgebaut:
Delphi-Quellcode:
  TBlobThread = class(TThread)
  private
    FOperation : TBlobOperation;
    FSession : TABSSession;
    FDatabase : TABSDatabase;
    FTable : TABSTable;
  protected
    procedure Execute; override;
  public
    ThreadData : TMemoryStream;
    constructor Create(Operation: TBlobOperation);
    destructor Destroy; override;
  end;
Beim Erzeugen des Threads ist das hinzugekommen:
  ThreadData := TMemoryStream.Create;
Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
var
  BlobThread: TBlobThread;
begin
  BlobThread := TBlobThread.Create(boSavePICTUREToDB);

  // Thread die Daten geben
  BlobThread.ThreadData.Position := 0;
  frmMain.Image1.Picture.Bitmap.SaveToStream(BlobThread.ThreadData);

  BlobThread.Priority := tpLower;
  BlobThread.Resume;
end;
Und hier das Speichern:
Delphi-Quellcode:
      begin
         FTable.Edit;
         try
           BlobStream := FTable.CreateBlobStream(FTable.FieldByName('Picture'),bmWrite);
           ThreadData.SaveToStream(BlobStream);
           ThreadData.Free;
           BlobStream.Free;
           FTable.Post;
         except
           FTable.Cancel;
         end;
      end;
Aber im Ergebnis ändert sich nix. Wenn ich ein bischen in der Oberfläche rumklicke (solange der Thread rennt), dann hängt irgendwann die Hauptanwendung komplett. Und zwar so lange bis das der Thread beendet wurde.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#9

Re: Absolute DB - Anwendung hängt trotz Thread Zugriff

  Alt 17. Apr 2009, 09:21
Eventuell tritt das Problem im Destructor auf, da beim FTable.Free wohl auch automatisch FTable.Close aufgerufen wird.

Versuchsweise die Datenmenge bereits im Execute schließen:
FTable.Close;
FDatabase.Close;

ThreadData würde ich im Destructor freigeben, damit auch im Fehlerfall nichts zurückbleibt.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Absolute DB - Anwendung hängt trotz Thread Zugriff

  Alt 17. Apr 2009, 10:42
Moin !

Meinst du so?
Delphi-Quellcode:
    boSavePICTUREToDB:
      begin
         FTable.Edit;
         try
           BlobStream := FTable.CreateBlobStream(FTable.FieldByName('Picture'),bmWrite);
           ThreadData.SaveToStream(BlobStream);

           ThreadData.Free;
           BlobStream.Free;

           FTable.Post;

           FTable.Close;
           FDatabase.Close;
         except
           FTable.Cancel;
         end;
      end;
Das klappt auch nicht. Denn noch während er mit dem Post beschäftigt ist hängt es ja.
Eben noch mal probiert. Habe bei FTable.Close einen Breakpoint gesetzt. Und er hängt beim Post fest.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  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 06:44 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