Урок на делфи 98. TThread. Работа с потоками.

Sdílet
Vložit
  • čas přidán 2. 07. 2024
  • Задание на Delphi. Как работают потоки. Убираем подвисание главной формы.
    #delphi , #TThread
    для выполнение задачи использовал компоненты и функции Button, TThread, ProgressBar1.

Komentáře • 30

  • @pro_delphi
    @pro_delphi Před 10 dny

    То что делаешь продолжай делать, я бы хотел видеть конечно изложение материала как сравнение "старого" delphi и сопоставление с новой редакцией, ну вот, например, те же потоки как сделать стандартным способом на D7 и как сделать то же самое но современными методами

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 7 dny

      Нее, мысль сравнения мне не очень. Буду делать как делал

  • @user-jj1in5zo2q
    @user-jj1in5zo2q Před 4 dny

    Как всегда интересные видео уроки! А не могли бы вы записать урок как программно из делфи допустим по нажатию кнопки завершить а потом запустить необходимую мне службу пусть к примеру это будет служба печати windows.

  • @user-du2mf4zj1p
    @user-du2mf4zj1p Před 43 minutami

    возможно что я что то не понимаю но разве нельзя поток выделить через таймер?

  • @nodirsadikov6029
    @nodirsadikov6029 Před 19 dny

    Привет сделайте урок по веб сервер и методы post put get delete

  • @pro_delphi
    @pro_delphi Před 10 dny

    Ты это серьезно? каким он спросом пользуется "нулевым"? я позавчера искал вакансию на hh результат: в Иркутской, Красноярском крае, забайкалье, хабаравском, Якутия и т.д. во всем дальневосточном регионе - ноль вакансий! вот это супер популярность!!! это территория больше все Европы

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 10 dny

      Наверно не так искали, я не говорил что он первый в рейтингах среди других языков, но спросом от пользуется

  • @user-np1bc8rn2k
    @user-np1bc8rn2k Před 13 dny

    Несколько устаревший способ ... сейчас уже все используют класс Ttask

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 13 dny

      Не все используют. Многим достаточно tthread.

  • @pro_delphi
    @pro_delphi Před 10 dny

    Не смешите людей, что Delphi популярен на вашем канале даже подписчиков почти нет: 379 человек смешно даже как тo... вы сами себе противоречите.

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 10 dny +1

      Есть каналы по Делфи где есть подписчики и по более, кроме вашего конечно)))

  • @X0KI3
    @X0KI3 Před 19 dny

    Не используем обращение формы из потока. Это не есть хорошо.
    Для синхронизации используем критическую секцию.
    Не надо использовать Resume, он давно устарел и его не кто не рекомендует использовать. заместо него используем Start.
    Вот мой пример. однопоточности и многопоточности.
    type
    TMyThread = class(TThread)
    private
    FProgress: Integer;
    protected
    procedure SetSync;
    procedure SetEnd;
    procedure Execute; override;
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    // Page: Integer;
    CriticalSection: TCriticalSection;
    implementation
    {$R *.dfm}
    procedure TMyThread.Execute;
    var
    I: Integer;
    begin
    CriticalSection.Enter;
    try
    for I := 0 to 100 do // за место 100 добавляем Page
    begin
    FProgress := I;
    Synchronize(SetSync);
    end;
    Synchronize(SetEnd);
    finally
    CriticalSection.Leave;
    end;
    end;
    procedure TMyThread.SetSync;
    begin
    Form1.sProgressBar1.Position := FProgress;
    Form1.sMemo1.Lines.Add('Цикл: ' + FProgress.ToString + ' пройден.');
    end;
    procedure TMyThread.SetEnd;
    begin
    Form1.smemo1.Lines.Add('Пройдено: ' + FProgress.ToString + ' циклов.');
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    CriticalSection := TCriticalSection.Create;
    end;
    procedure TForm1.sButton1Click(Sender: TObject);
    var
    aThread: TMyThread; // aThread: array of TMyThread; I: Integer; для многопоточности
    begin
    Form1.sProgressBar1.Position := 0;
    { // Многопоточность
    SetLength(AThread, sSpinEdit1.Value);
    for I := 0 to Length(aThread) - 1 do
    begin
    // Page := sSpinEdit1.Value;
    AThread[I] := TMyThread.Create(True);
    AThread[I].FreeOnTerminate := True;
    AThread[I].Start;
    end; }
    AThread := TMyThread.Create(True);
    AThread.FreeOnTerminate := True;
    AThread.Start;
    end;

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 18 dny

      При большом количестве потоков ваш вариант будет безопасней, спасибо

    • @user-np1bc8rn2k
      @user-np1bc8rn2k Před 13 dny

      Вы на какой RAD Studio седите? так делали при царе горохе лет 15 назад

    • @KODnyj_Ruslan
      @KODnyj_Ruslan  Před 13 dny

      Я не слежу за модой, мне главное что бы работало.

    • @pro_delphi
      @pro_delphi Před 13 dny

      Если у вас RAD 10.4 и выше то USES System.Threading, System.Diagnostics, System.SyncObjs
      TThread.Synchronize(nil, procedure()
      begin
      // например,
      memo1.lines.add('my messages'');
      end);

    • @pro_delphi
      @pro_delphi Před 13 dny

      Но лучше используйте более современный класс
      MyThrede := TTask.Create(procedure()
      begin
      // что то делаем в потоке
      TThread.Synchronize(nil, procedure()
      begin
      // например, что то выводим на форму
      memo1.lines.add('my messages'');
      end);
      end);