Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Как остановить выполнение метода   Найти похожие ветки 

 
DK ©   (2005-01-10 18:10) [0]

Здравствуйте! У меня есть такая проблема.
У меня есть длительный по времени метод. Мне нужно его остановить выполнение этого метода из главной формы. Как это сделать? Проверка на флаг не подходит.
Сейчас программа ведет себя так:
 -нажали на кнопку выхода;
 -останавливаеться метод;
 -заходит в обработчик кнопки, отрабатывает весь;
 -возвращаеться в остановленный метод и дорабатывает его до конца.


 
DK ©   (2005-01-10 18:45) [1]

Я сам прочитал свое сообщение и ничего не понял о чем это я писал.
В методе происходит конвертирование данных из одной БД в другую.
Мне нужно из формы его прервать и закрыть приложение.
Я понимаю, что уже вечер:-)


 
Alexander Panov ©   (2005-01-10 18:51) [2]

DK ©   (10.01.05 18:10)
Проверка на флаг не подходит.


Почему не подходит?


 
Kerk ©   (2005-01-10 18:52) [3]

два варианта пока вижу
1. Выполняй в отдельном потоке
2. Пусть при нажатии на кнопку задается значение переменной соответствующее условию выхода их цикла. А в цикле Application.ProcessMessages делай.


 
DK ©   (2005-01-10 18:59) [4]

//Почему не подходит?
Потому что остановка конвертирования не планировалась изначально.
И чтоб ее реализовать нужно ее добавлять ну в очень многих местах(где-то так 200 мест :-)).
Да программа будет супер медленной (сейчас пока  медленная:-)).//


 
DK ©   (2005-01-10 20:07) [5]

Кто-то знает как прервать работу процедуры. Без проверки флагов внутри ее.


 
Kerk ©   (2005-01-10 20:10) [6]

DK ©   (10.01.05 20:07) [5]
читать умеешь?
Kerk ©   (10.01.05 18:52) [3]
1. Выполняй в отдельном потоке


 
DK ©   (2005-01-10 20:12) [7]

Я смогу прервать поток? Если да то подскажи как.


 
begin...end ©   (2005-01-10 20:13) [8]

> [7] DK ©   (10.01.05 20:12)

TThread.Suspend


 
DK ©   (2005-01-11 11:09) [9]

TThread.Suspend//
Эта команда приостановит поток. Но мне нужно его прервать, да так чтоб память очистилась. А выполняющаяся внутри его транзакция сделала откат.


 
TUser ©   (2005-01-11 11:16) [10]


> TThread.Suspend//
> Эта команда приостановит поток. Но мне нужно его прервать,
> да так чтоб память очистилась. А выполняющаяся внутри его
> транзакция сделала откат.

TThread.Terminate, а Экзекьют оформить так

while (not Terminated) and {not end of work} do
 {single step}

if {not end of work} then
 {rollover}


 
KSergey ©   (2005-01-11 11:30) [11]

> [10] TUser ©   (11.01.05 11:16)
> TThread.Terminate, а Экзекьют оформить так
>
> while (not Terminated) and {not end of work} do
>  {single step}

Это издевательство?? Он же пишет упорно: "Проверка на флаг не подходит."
А вы предлагаете проверять флаг Terminated :)

> [4] DK ©   (10.01.05 18:59)
> И чтоб ее реализовать нужно ее добавлять ну в очень многих
> местах(где-то так 200 мест :-)).

Скажу грубо: это ваши проблемы.
Перепишите так, чтобы это место было одно. Тем более раз конвертирование - скорее всего обрабоотка по записям - вот и проверять после каждой записи, где тут 200 мест?
А завершить корректно какую-либо процедуру извне без ее собственного желания (а это желание как раз в проверке флага или иного сигнала извне и заключается) - невозможно, хоть завыносись ее в поток.
Елинственное - поток можн огрубо прибить, но это не есть корректное его завершение с "да так чтоб память очистилась".



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1104590288
AlterEgo of WondeRu
2005-01-01 17:38
2005.01.23
Чего бы Вы хотели достичь в 2005 году...


1-1105367591
Guest_01
2005-01-10 17:33
2005.01.23
Подскажите, в чем ошибка?


1-1105360466
Yurij-7
2005-01-10 15:34
2005.01.23
Два действия на одной кнопке


4-1101905484
Stefan
2004-12-01 15:51
2005.01.23
Ошибка RegisterServiceProcess в NT-подобных системах


1-1104089765
X3M
2004-12-26 22:36
2005.01.23
Левая/правая кнопа мыши