Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InterBase, Indy и многопоточность 
:(
    Опции темы
gashik
Дата 11.8.2011, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Есть следующий код
Код

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); и как избавиться от дублирующихся записей и нулей?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.