Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
14-1105020507
ceval
2005-01-06 17:08
2005.01.23
Всех с РОЖДЕСТВОМ


10-1081170687
malkolinge
2004-04-05 17:11
2005.01.23
COM сервер и два интерфейса (можно3 )


4-1101761104
cerber1
2004-11-29 23:45
2005.01.23
И снова Drag&Drop


1-1105030782
Zaurr
2005-01-06 19:59
2005.01.23
Клонирование


1-1105452981
SomeOneElse
2005-01-11 17:16
2005.01.23
Кнопки на TToolBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский