Главная страница
    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.033 c
3-1103537492
IgorV
2004-12-20 13:11
2005.01.23
QReport, вложенная группировка


1-1105042555
pika
2005-01-06 23:15
2005.01.23
Перекрывание !!!


1-1105287810
Ph2005
2005-01-09 19:23
2005.01.23
Печать html страниц


14-1104461424
Думкин
2004-12-31 05:50
2005.01.23
С днем рождения! 31 декабря


14-1105111706
Programming_GOD
2005-01-07 18:28
2005.01.23
Где можно получить сертификацию Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский