Показать сообщение отдельно
  #17  
Старый 19.10.2023, 21:05
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Сообщение критическая секция

нашел самый медленный, бесплатный mysql
с потоком разобрался, пока закачивает, формой можно играться
я не стал трогать synchronize(AddToDbCb); = т.к. тупить начинает.
И не уверен:
Код:
cs:TCriticalSection;
CS.Enter;
= нужно ли вообще это?
Код:
 type
  TInsertImageToDbCallBack = procedure(AFileName: String; ASize: Integer) of object;

  private
    { Private declarations }
  public
  procedure FileImg(const dirName:string; ACallBack : TInsertImageToDbCallBack);
  procedure AddToMemoCb(AFileName: String; ASize: Integer);
  //procedure AddToDbCb(AFileName: String; ASize: Integer);
    { Public declarations }
  end;

  TSomeThread = class(tthread)
private
  procedure AddToDbCb(AFileName: String; ASize: Integer);
protected
  procedure execute; override;
end;

var
  Form1: TForm1;
  cs:TCriticalSection;
  chek:boolean;

implementation

{$R *.dfm}

type
  TFileItemData = class
    AFileName : String;
    ASize : Integer;
    function toString : String;
  end;

procedure TSomeThread.AddToDbCb(AFileName: String; ASize: Integer);
begin
form1.SqlConnection1.Open;
try
  form1.SqlQuery1.SQL.Text := 'INSERT INTO test1 (id, name, reviews, size, attribute) VALUES (:id, :name, :reviews, :size, :attribute)';
  form1.SqlQuery1.ParamByName('id').AsInteger := 1;
  form1.SqlQuery1.ParamByName('name').AsString := AFileName;
  form1.SqlQuery1.ParamByName('reviews').AsInteger := random(5);// Arews;
  form1.SqlQuery1.ParamByName('size').AsInteger := ASize; //inttostr(imgsize);
  form1.SqlQuery1.ParamByName('attribute').AsString := 'gggggg';
  form1.SQLQuery1.ExecSQL;
  form1.Memo1.Lines.Add('Запись_добавлена='+Afilename+inttostr(ASize));
finally
form1.SqlConnection1.Close;
end;
end;

procedure TSomeThread.execute;
  var
  obj : TFileItemData; i:integer;
  begin
  inherited;
  CS.Enter;
  //synchronize(AddToDbCb);
  if form1.ListBox2.Count =14 then
    begin
    for i := 0 to  form1.ListBox2.Count-1 do  begin
      obj := form1.ListBox2.Items.Objects[i] As TFileItemData;
      AddToDbCb(obj.AFileName,obj.ASize);
      form1.progressbar1.Position:=i;
    end;
end;

end;

function TFileItemData.toString : String;
begin
  Result := Format('FileName: %s; Size: %d',[AFileName,ASize]);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  NewThread: TSomeThread;
begin
  NewThread:=TSomeThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpLower;
  NewThread.Resume;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  cs:=TCriticalSection.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
cs.Free;
end;
курсы для чайников с ноля можно???
Ответить с цитированием