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

Вниз

Прерывание работы программы   Найти похожие ветки 

 
Fedia   (2004-09-19 08:34) [0]

Привет всем.
Хотелось бы обсудить вот какой вопрос:
"Кто и каким образом прерывает работу своей программы во время ее выполнения?". Не закрывает программу, а именно прерывает выполнение текущей задачи, оставляя возможность повторного ее запуска.
Я использую два основных способа, у каждого из которых свои недостатки.
1. Присваиваю глобальной переменной определенное значение (например при нажатии на кнопку прервать), а по ходу выполнения процедуры время от времени проверяю значение этой переменной и если оно соответствует искомому значению, то либо вызываю процедуру exit (в случае если нет необходимости освобождать память), либо при помощи оператора goto перехожу на строки кода, в которых освобождается память. К недостаткам этого способа можно отнести:
- необходимость добавлять в процедуры и функции проверку изменения значения переменной;
- работа программы прерывается не сразу, а только после достижения строчки, в которой проверяется значение переменной.
2. Запускаю выполнение задачи в потоке и при нажатии на определенную кнопку "убиваю" поток при помощи функции TerminateThread. После чего при необходимости произвожу освобождение памяти. Недостатки этого способа я даже наверное не смогу описать полностью. Могу сказать только, что нередки случаи, когда после прерывания работы программы подобным образом ее приходится перезапускать.
Прошу мастеров поделиться своим опытом в данном вопросе.


 
Anatoly Podgoretsky ©   (2004-09-19 11:45) [1]

Крестиком на заголовке


 
GanibalLector ©   (2004-09-19 11:57) [2]

Полностью согласен с Anatoly Podgoretsky.Ну разве что с потоками балуюсь,убивая их.


 
Anatoly Podgoretsky ©   (2004-09-19 12:21) [3]

GanibalLector ©   (19.09.04 11:57) [2]
Потоки автоматически убиваются вместе с программой, поэтому нет нужды.


 
Fedia   (2004-09-19 23:00) [4]

Anatoly Podgoretsky ©   (19.09.04 11:45) [1]
Ах ну да, а то я все ALT+F4 да ALT+F4, да еще и диспетчером задач балуюсь :)
У меня мелькала надежда, что есть еще какие-либо навороченные способы. Но на нет и суда нет.


 
Defunct ©   (2004-09-20 00:18) [5]

Может быть имеется в виду это?
http://delphimaster.net/view/1-1095527219/

см ответ [1]


 
Defunct ©   (2004-09-20 00:30) [6]

[5]
Сорри, прерывание и приостановка разные вещи.

Ваш вариант 2 вполне пригоден, но делайте лучше не TerminateThread а более мягкое завершение - Thread.Terminate, внутри потока проверяйте свойство Terminated. В OnTerminate можно освобождать память.

вариант 1 - кривоват, да и goto/exit.. в общем криво.


 
GanibalLector ©   (2004-09-20 02:11) [7]

Потоки автоматически убиваются вместе с программой, поэтому нет нужды
Это понятно,но ИНОГДА приходится их мочить до завершения программы.


 
TUser ©   (2004-09-20 09:25) [8]


> Не закрывает программу, а именно прерывает выполнение текущей
> задачи, оставляя возможность повторного ее запуска.

Мои проги многоразовые - их всегда можнозапустить еще раз, даже после [1].


 
Fedia   (2004-09-20 09:47) [9]

>Мои проги многоразовые - их всегда можнозапустить еще раз, даже после [1].
Ух ты, хорошо что есть люди, которые пишут подобные программы. Давайте поддержим отечественных производителей многоразовых программ :)

Defunct ©   (20.09.04 00:30) [6]
Да я бы с удовольствием использовал Thread.Terminate если бы он сразу прерывал работу, а не ждал такой возможности, которая как правило наступает в конце запущенной процедуры. Время - деньги, и сэкономленные нервы пользователей.


 
TUser ©   (2004-09-20 09:58) [10]


> Давайте поддержим отечественных производителей многоразовых
> программ :)

Хорошо. Я отечественный производитель и согласен на финансовую поддержку моих продуктов.


 
Fedia   (2004-09-20 10:19) [11]

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



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

Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
4-1092979626
RagE
2004-08-20 09:27
2004.10.03
Оконная процедура и класс


3-1094167004
O l e g
2004-09-03 03:16
2004.10.03
Переполнение стека, что это?


14-1095082180
menart
2004-09-13 17:29
2004.10.03
VDSL


6-1090588661
Ivolg
2004-07-23 17:17
2004.10.03
Пресылка


4-1093595558
Andrey
2004-08-27 12:32
2004.10.03
CTRL+INS (эмулировать их нажатие)





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