Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прерывание работы программы [D7, Win2k]


Fedia ©   (2004-09-19 08:34:00) 

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


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

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


TUser   (2004-09-20 09:58:00) [2]


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

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


Fedia   (2004-09-20 09:47:00) [3]

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

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


TUser   (2004-09-20 09:25:00) [4]


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

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


GanibalLector   (2004-09-20 02:11:00) [5]

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


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

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

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

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


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

Может быть имеется в виду это?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1095527219&n=0

см ответ [1]


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

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


Anatoly Podgoretsky   (2004-09-19 12:21:00) [9]

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


GanibalLector   (2004-09-19 11:57:00) [10]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо