FRAX und Threads

Moderator: Moderatoren

Antworten
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

FRAX und Threads

Beitrag von kallecux »

Schönen Sonntag!

Ich habe mich mit FRAX beschäftigt und denke, dass es das richtige AddOn für mich ist. Allerdings versuche ich mein "Thread-Problem" zu lösen - ich arbeite nach der "TopDown" Philosophie und starte sehr viele Teilprogramme als Thread. Ich habe einen Hinweis gelesen, dass FRAX nicht Thread-tauglich ist, habe aber auch einen Hinweis gelesen, dass es mit laden und entladen funktonieren soll.

Kann mir jemand sagen, wie ich es anstellen soll - so wie ich es mache erhalte ich beim 2. Aufruf des Threads "Interne Datenstrukturen beschädigt".

So sieht meine Thread-Funktion aus:


// ###########
function FRAX()

FrPrn := frReportManager():new("FRSyst.dll")
FrPrn:init()

USE Kunden new
FrPrn:SetWorkArea("Kunden", Select("Kunden"))

FrPrn:DesignReport()
FrPrn:LoadFromFile("1.fr3")
FrPrn:ShowReport()

FrPrn:DestroyFR()
close databases
return .T.

Freundliche Grüße
Karl Heinz
Beste Grüße

Karl Heinz
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Moin Karl Heinz,
mit folgendem Code sollte es funktionieren:

Code: Alles auswählen

function FRAX( lShowDesigner)
   Local FrPrn

   FrPrn := frReportManager():new("FRSyst.dll")
   FrPrn:init()

   USE Kunden new
   FrPrn:SetWorkArea("Kunden", Select("Kunden"))
   FrPrn:LoadFromFile("1.fr3")

   if lShowDesigner                       // Designer aufrufen
        FrPrn:DesignReport()     
   else                                   // Preview-Modus
      FrPrn:PrepareReport()     
      FrPrn:ShowReport()
   endif

   FrPrn:ClearDatasets()
   FrPrn:DestroyFR()
   close databases
return NIL

Gruß, Olaf
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

Beitrag von kallecux »

Hallo Lewi,

danke für die schnelle Antwort und sorry wegen meines späten Feedback's. Leider funktioniert es so nicht. Der erste Aufruf ist OK, der Designer startet, wenn ich ihn beende und erneut aufrufe erhalte ich:

Fehlerprotokoll von: F:\alaska\Projekte\pl-profi\Entwicklung\PL-PROFI.EXE Datum: 15.11.2007 15:37:29
Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebsystem : Windows XP 05.01 Build 02600 Service Pack 2
Programmversion : PL-Profi 2007.004
Kunde : xxxxxxxxxxxxxxxxxxxxxxxx
Seriennummer : 30000-00000
Speicher VIRT_AVAIL : 291840
Speicher VIRT_TOTAL : 601088
Speicher RAM_AVAIL : 37888
Speicher RAM_TOTAL : 253952
Speicher PROC_TOTAL : 450820
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: _DLL


Interne Datenstrukturen beschädigt.

Nach OK:

Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist....an der Stelle 0c.... aufgetreten.

Nach OK:

Runtime error 217 at 03.....

WICHTIG: Ich starte die Function in einen THREAD!

Gruß
Karl Heinz
Beste Grüße

Karl Heinz
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

Beitrag von kallecux »

Fehler erkannt (dank Spirin)!

FrPrn := frReportManager():new("FRSyst.dll")
FrPrn:init()

Das :init() darf nicht sein, da es bereits durch :new() implizit ausgeführt wird.

Schöne Grüße
Karl Heinz
Beste Grüße

Karl Heinz
Antworten