2013-10-02 1 views
3

См: How to animate a spinner while performing a workload via threadingКак избавиться от лагов при работе с многопоточной

Я работаю с приложением Delphi xe5 для прошивки. Выполняя SQL-запрос, у меня есть функция TAniIndicator. Я использую потоки - для конкретного кода, см. Статью, указанную выше.

Все работает, однако, при использовании кода, которому мне помогли в предыдущем вопросе, я заметил добавленную задержку. Когда бежал под отладчиком, приложение зависает между строк:

Thread.DoTerminate; 
Thread.FFinished := True; 

под ThreadProc Функция System.Classes блока

Любой ключ, как, почему? Или что я могу сделать, чтобы предотвратить добавленное 5-секундное отставание? Спасибо

Update ответ TLama:

procedure TForm_Login.WorkIsDone(Sender : TObject); 
begin 
    Form_Login.LoadSpinnerFrame.visible := False; 
    Form_Login.LoadSpinner.Visible := False; 
    Form_Login.LoadSpinner.Enabled := False; 
    Form_Login.btnLogin.Text := 'Logout'; 
    Form_Login.btnLogin.Enabled := True; 
    if GoodLogin = 1 then 
    Main_Form.show; 
end; 

Мой OnTerminate() связан с описанной выше процедуре.

+0

У вас есть какой-либо код в методе 'OnTerminate' вашего потока? – TLama

+0

Вопрос Обновлено, Спасибо – ThisGuy

+0

Вы уверены, что вы выбрали этот «Сон (5000)»? –

ответ

4

TThread.DoTerminate() звонит TThread.Synchronize(), чтобы запустить TThread.OnTerminate обработчик события в основной теме. TThread затем блокируется до тех пор, пока основной поток не обработает этот запрос - который не происходит мгновенно, поскольку основной поток должен сначала обнаруживать и обрабатывать новые сообщения, а обработчик OnTerminate завершает работу. Только тогда управление возвращается в TThread, чтобы он мог завершить свою логику. Поэтому, если вы столкнулись с отставанием 5 секунд в DoTerminate(), то это означает, что основной поток занимает 5 секунд для обнаружения и обработки запроса Synchronize().

+0

Так что я могу с этим поделать, или нет? – ThisGuy

+0

Для других автоответчиков по этому вопросу. Просмотрите комментарии выше в ответах на OP – ThisGuy