Thread's und DbCloseAll

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
User avatar
Horst
Posts: 337
Joined: Tue Oct 13, 2015 3:27 pm

Thread's und DbCloseAll

Post by Horst »

Hallo
Ich habe gemerkt , dass DBCloseAll () in einem Thread ebenso Auswirkungen auf einen anderen Thread hat.
Ist das normal ? und kann man da auch mit DbServer:close () in den Hammer laufen ?
Gruss
Horst
User avatar
wriedmann
Posts: 3775
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Thread's und DbCloseAll

Post by wriedmann »

Hallo Horst,
Klar, DBCloseAll() ist dafür gedacht, alle offenen DBF-Verbindungen zu schließen.
DBServer:Close() schließt nur die Verbindung zur Tabelle, die in diesem DBServer geöffnet war.
Da musste das Entwicklungteam extra die Thread-Information mit dazunehmen.
Der Garbage Collector läuft nämlich in einem eigenen Thread, daher muß ein DBServer auch threadübergreifend geschlossen werden können.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 337
Joined: Tue Oct 13, 2015 3:27 pm

Thread's und DbCloseAll

Post by Horst »

Hallo Wolfgang
Ich weiss nur noch, dass ich bei meinen CGI's den DbCloseall() reinmachen musste weil irgendwie sonst eine DB noch offen blieb obwohl die EXE schon beendet war. Werde nun besonders vorsichtig sein müssen beim öffnen und schliessen von Db's
Gruss
Horst
User avatar
robert
Posts: 4555
Joined: Fri Aug 21, 2015 10:57 am
Location: Netherlands

Thread's und DbCloseAll

Post by robert »

Horst,

I do not understand your question. What do you mean with "effects on another thread" ?

Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
User avatar
Horst
Posts: 337
Joined: Tue Oct 13, 2015 3:27 pm

Thread's und DbCloseAll

Post by Horst »

Hallo Robert
i do:
WHILE SELF:closeToken:IsCancellationRequested == FALSE
context := messages:Take(SELF:closeToken:Token)
SELF:Response(context)
END WHILE
//Response is a thread - hope so :-)
then in Response ()
CASE cProgramm == "elektro_main.exe"
cString := StartElektroArtikel (oRequest, cInputString) // its in a DLL
StartElektroArtikel () ends with DbCloseall () and Return cString
and now when i call the StartElektroArtikel (oRequest, cInputString) many times , the thread close the database and in the parallel thread i have a error because the DB is closed.
i hope you understand me, hard to explain. i uploaded the app in "WebServer mit Login und Artikelverwaltung"
Horst
Post Reply