Главная страница
    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.038 c
4-1101991745
mbIkola
2004-12-02 15:49
2005.01.23
При использовании HOOKa на клаву в Виндах 9х вылазит шибка Mprexe


14-1104929753
esu
2005-01-05 15:55
2005.01.23
форматировщик html кода


14-1104708953
Кудесник
2005-01-03 02:35
2005.01.23
Onimusha 3... что это?


14-1104815872
cyborg
2005-01-04 08:17
2005.01.23
Как хорошо!


1-1104762803
GanibalLector
2005-01-03 17:33
2005.01.23
ИМЯ файла...





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