Форум: "Основная";
Текущий архив: 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.063 c