![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Завершение thread Не происходит [D7]
Fantnk © (2009-11-07 21:16:00)В программе на Delphi создал Procedure MyThread.Execute, выполняющую несколько циклов и выводит прогрессбар (отдельная форма).
После всего этого поток не закрывается. Terminated = false. Как мне закрыть поток (принудительно или как - не важно). Важно то, чтобы программа корректно закрылась, а не с EOSError (не верный дескриптор окна, #1400).
Помогите, пожалуйста.
Anatoly Podgoretsky (2009-11-07 21:44:00) [1]> Fantnk (07.11.2009 21:16:00) [0]
А надо Terminated = true
Сергей М. (2009-11-07 21:41:00) [2]
> Это не допустимо?
Да, это не допустимо.
> нужно, чтобы шлавная форма не подвисала во время выполнения
> программы
Для этого предусмотрен метод TThread.Synchronize - он поставит в хвост очереди осн.потока "команду" на выполнение указанного тобой метода твоего класса TMyThread, в котором можно будет безопасно обращаться к виз. VCL-контролам.
Fantnk (2009-11-07 21:34:00) [3]Т.е. я не могу выводить не только прогресс бар, но и, допустим, вносить к-либо значения в edit'ы?
Кусок из процедуры Thread:
Form1.Memo1.CopyToClipboard;
sleep(10);
Form1.Edit1.PasteFromClipboard;
Это не допустимо?
Есть альтернатива потокам? Мне нужно, чтобы шлавная форма не подвисала во время выполнения программы.
Сергей М. (2009-11-07 21:28:00) [4]
> выводит прогрессбар
Обращения к визуальным VCL-контролам из доп.потоков VCL-приложения недопустимы.
Сергей М. (2009-11-07 21:27:00) [5]И что ?
Компилятор не обязан ловить ошибки логики, приводящей к катастрофе алгоритма в ран-тайм
Fantnk (2009-11-07 21:24:00) [6]
> Исправь ошибку в теле Execute - будет закрываться корректно.
При компиляции никаких ошибок не выдало...
Сергей М. (2009-11-07 21:21:00) [7]
> Важно то, чтобы программа корректно закрылась
Исправь ошибку в теле Execute - будет закрываться корректно.