Есть следующий код
| Код | unit MainServer; ... procedure TMainForm.IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var path:string; NewThread:TerminalTread; ThreadID:cardinal; begin if ARequestInfo.Params.Values['Action']='Update' then begin NewThread:=TerminalTread.Create(false); NewThread.WaitFor; AResponseInfo.ContentText:='Ok'; end; end;
|
| Код | unit ServerTread; ... type KotInfo = record ctm : TDateTime; open : double; low : double; high : double; close : double; vol : integer; end;
type TerminalTread = class(TThread)
private Fkk:integer; Fxxx:Array[0..100] of KotInfo; protected procedure UpdateM1; procedure Execute; override; end; ... implementation uses SysUtils, MainServer; .... procedure TerminalTread.UpdateM5; var i:Integer; begin
MainForm.IBQuery1.Close; for i:=0 to Fkk-1 do begin with MainForm.IBQuery1 do begin SQL.Clear; SQL.Add('INSERT INTO '+Fquote+'_QUOTE '+ 'VALUES (:DATES,:ACCOUNT_ID,:SYMBOL_ID,:OPEN,:LOW,:HIGH,:CLOSE,:VOLUME)');
Params[0].AsDateTime :=Fxxx[i].ctm; Params[1].AsInteger :=1; Params[2].AsInteger :=1; Params[3].AsFloat :=Fxxx[i].open; Params[4].AsFloat :=Fxxx[i].low; Params[5].AsFloat :=Fxxx[i].high; Params[6].AsFloat :=Fxxx[i].close; Params[7].AsInteger :=Fxxx[i].vol; ExecSQL; Close; end; end; end; end; procedure TerminalTread.Execute; begin Start();
Fquote:=TABLE_M1; Fkk:=HistoryKot('GBPUSD',PERIOD_M1,100,Fxxx); //эта функция возвращает массив из 100 элементов типа KotInfo; Synchronize(UpdateM1);
end;
end.
|
Так вот, после запроса запускаеться тред, в котором выполняться код, но почему-то количество записей в базе становиться порядка, верней даже (+/- 100) , 6358. Записи дублируються 4 раза и очень много с нулевыми значениями (в передаваемом процедуре массиве нулевых значений нет). Заметил, что при отправке запроса серверу, IdHTTPServer1CommandGet, создает два потока, хотя поток с обработкой данных, вроде бы один. Подскажите, что в коде вызывает повторно процедуру Synchronize(UpdateM1); и как избавиться от дублирующихся записей и нулей?
|