Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.061 c
4-1093377556
VZup
2004-08-24 23:59
2004.10.03
Круглая SpeedButton


3-1094111059
Iconka
2004-09-02 11:44
2004.10.03
Транзакции в FIBPlus (БД FireBird 1.5)


14-1095225731
Ozone
2004-09-15 09:22
2004.10.03
Интересная задачка


8-1089800195
Гость
2004-07-14 14:16
2004.10.03
Как проиграть музыку через DerectX?


6-1090973055
Лев Ландау
2004-07-28 04:04
2004.10.03
Как вытащить текущее значение URL из TWebBrowser-a?