powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / И опять про потоки и про формы
4 сообщений из 29, страница 2 из 2
И опять про потоки и про формы
    #39839974
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BasketbolЕсть некие последовательности действий: сделать то то, подождать выполнения какого то условия, сделать паузу столько то секунд и другие. Некоторые из этих действий затрагивают компоненты VCL.

т.е. вам надо выполнить асинхронные задачи, а процесс ее выполнения, и промежуточные этапы отображать на экране?
Вы можете описать реальную задачу... Вангую что TThread в явном виде вам не понадобится и не нужно городить вокруг него непонятно что..

Зачем самому создавать потоки, если можно более компактно все сделать через таски...

Потоки самостоятельно создают только в том случае, если они должны жить долго и выполнять задачи очередей...
Все остальные случаи закрывают таски...
...
Рейтинг: 0 / 0
И опять про потоки и про формы
    #39839992
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeliusziv-2014пропущено...

Какая разница - всеравно в основном потоке исполнится.

доп поток вызывает Syncrhonize, в котором вызывается Application.PrcoessMessages, в это время пользователь нажимает закрыть форму, у которой в OnClose стоит FThread.Free (Terminate+WaitFor+Destroy), а поток висит в TMonitor.Wait(SyncProcPtr.Signal, ThreadLock, INFINITE) - дедлок. Если поток уничтожать в OnDestroy, то дедлока не будет.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FThread: TThread;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FThread.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FThread := TMyThread.Create;
end;

{ TMyThread }

procedure TMyThread.Execute;
begin
  Synchronize(
    procedure
    var
      i: Integer;
    begin
      i := GetTickCount;
      while (GetTickCount - i) < 3000 do
      begin
        Application.ProcessMessages
      end
    end
  );
end;

end.


В synchronize лучше не делать операций с циклами.
...
Рейтинг: 0 / 0
И опять про потоки и про формы
    #39840044
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вызывать ProcessMessages из Synchronize - это хрестоматийный "выстрел себе в ногу". Сдуру, как говорится, можно и хрен сломать. С другой стороны, этот вызов м.б. закопан в глубине вызовов возможно даже чужого кода. Так что и то, и другое лучше избегать.
...
Рейтинг: 0 / 0
И опять про потоки и про формы
    #39840094
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Сдуру, как говорится, можно и хрен сломать.
Вы - как дети, ей Богу. ТС азов не знает, для него ваши теоретические выкладки подобно игре в шахматы с доской и фигурами в уме. Лучше напишите ему минимально рабочий код.
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / И опять про потоки и про формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]