Главная страница
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.022 c
8-1089744445
Mangust
2004-07-13 22:47
2004.10.03
PlaySound


6-1090842711
SergeyIgudin
2004-07-26 15:51
2004.10.03
StringList & WinSocket


3-1094508546
DDD
2004-09-07 02:09
2004.10.03
HELP SQL


1-1095335393
roma
2004-09-16 15:49
2004.10.03
Icon


6-1090492324
Duk
2004-07-22 14:32
2004.10.03
Как с п-ю TMemoryStream переслать текст от ServerSocket к ClienSo