![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прерывание выполнения большой функции [D5, Win95/98]
td © (2004-10-19 21:35:00)В программе есть функция по экспорту всех данных в ворд.
И занимает она довольно продолжительное время - порядка часа или больше.
В общем, столкнулся с тем, что пользователи ее вызывают из любопытства, а ждать надоедает - и выходят конрол-альт-дел, потому что во время создания отчета программа ни на что не реагирует - только градусник бежит.
Хочу сделать кнопку "Прервать". С помощью чего это можно организовать?
Piter (2004-10-19 23:18:00) [1]Самое грамотное решение будет таковым:
делать функцию экспорта в отдельном потоке, при нажатии "Прервать" потоку просто делается Terminate.
В самой функции экспорта небось есть какой-то цикл, который выводит серию данных, так в этом цикле при каждой итерации проверять значение переменной Terminated (или как там ее). Если она True - значит, закругляемся.
SergP (2004-10-19 21:52:00) [2]Если ничего хорошего не подскажут, то попробуй так:
Делаешь переменную boolean, в самом начале своей функции пишешь туда например false, а в обработчике нажатия кнопки "Прервать" присваиваешь этой переменной true.
В самой функции постоянно проверяешь значение этой переменной и если вдруг что то выходишь...
Естественно такое лучще делать если твоя функция представляет из себя в основном цикл. Только если функция работает не в отдельном потоке, придется вставить туда Application.ProcessMessages
А лучше всего запускай функцию в отдельном потоке, тогда все вышеперечисленное не понадобится....
Constantin (2004-10-19 21:39:00) [3]Прерывание подобное Ctrl-Alt-Delete вообще какое -либо прерывание с высоким приоритетом наверно надо сделать