Hallo,
ich bin gerade dabei meine erste Multithreading Anwendung am basteln.
Es sollen, aktuell, 2 Threads Datensätze aus einer
DB holen und diese dann via http hochladen.
Ich hatte mich für die Komponente BMDThread entschieden. Wenn man mal die Datenbankverbindung außen vor lässt, funktioniert das ganze auch gut
Beide Threads werden gleichzeitig gestartet. Dabei erhalte ich entweder eine
Access Violation, "Zu wenig Arbeitsspeicher" oder es funktioniert mal.
Wenn ich die Threads zeitversetzt starte, funktioniert es einwandfrei.
Im Execute Event der Threads habe ich die procedure drin stehen z.B. ExecuteAccept();
Hier die gesamte procedure:
Delphi-Quellcode:
procedure TForm_Main.ExecuteAccept();
var DBConnection: TUniConnection; DBQuery: TUniQuery;
begin
DBConnection:=TUniConnection.Create(
nil);
DBConnection.Server:='
localhost';
DBConnection.Port:=3306;
DBConnection.Username:='
root_copy';
DBConnection.Password:='
password';
DBConnection.ProviderName:='
MySQL';
try
DBConnection.Connect;
except
on E :
Exception do
begin
cxMemo_Accept.Lines.Add('
DBVerbindung Fehler');
cxMemo_Accept.Lines.Add('
Exception message = '+E.
Message);
end;
end;
if DBConnection.Connected
then
begin
try
DBQuery:=TUniQuery.Create(
nil);
DBQuery.Connection:=DBConnection;
DBQuery.SQL.Text:='
SELECT * FROM TABELLE h LIMIT 100;';
DBQuery.Active:=true;
cxMemo_Accept.Lines.Add(inttostr(DBQuery.RecordCount));
DBQuery.Active:=false;
DBQuery.Free;
except
on E :
Exception do
begin
cxMemo_Accept.Lines.Add('
Query Fehler');
cxMemo_Accept.Lines.Add('
Exception message = '+E.
Message);
end;
end;
DBConnection.Close;
end;
DBConnection.Free;
end;
Ich verstehe nicht genau wo das Problem ist. Habe doch extra alles in den jeweiligen Thread gepackt. Die zweite Procudure ist exakt gleich (die
SQL Abfrage ist anders).
Vielleicht kann sich das einer erklären und mir auf die Sprünge helfen. Alternativ wollte ich die
SQL Verbindung auf das Main Form setzen aber davon wird in mehreren Beiträgen abgeraten.
Vielen Dank