Мне нужно работать с устаревшим кодом. Этот код имеет TTimer
, созданный в основном потоке. В событии OnTimer
таймер периодически проверяет состояние некоторых данных в рабочем потоке.Создает ли TTimer.OnTimer рабочий поток для синхронизации с основным потоком?
псевдокод:
procedure MainForm.OnTimer(Sender: TObject);
begin
if WorkerThread.Data.State = full then
begin
WorkerThread.Free; //This freezes GUI.
end else
//Do something else.
end;
Проблема заключается в том, что я хочу сделать некоторые базовые операции, когда WorkerThread
прекращает. Чтобы избежать синхронизации, я преодолел метод DoTerminate
. Однако в этом конкретном случае это не помогает, и мой графический интерфейс становится замороженным до тех пор, пока не закончится DoTerminate
.
Могу ли я как-то избежать заморозки?
Спасибо.
Так что вы делаете в DoTerminate? –
Некоторые базы данных. Я не синхронизирую с графическим интерфейсом. – Wodzu
Здесь недостаточно кода. Вызов Free на поток вызывает Terminate, а затем WaitFor. Поможет ли это замораживание? –