Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400

Как закрыть приложение, которое находится в процессе выполнения алгоритма?

31.08.2017, 12:12. Показов 2940. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

В программе используется алгоритм преобразования строковых данных. Этот процесс может длиться пару суток. В Процедуру которая выполняет этот алгоритм передается переменная, с помощью которой можно продолжить работу с последнего места. Данные автоматически сохраняются каждые 10 минут и при выходе из программы.

Когда нажимаю кнопку выйти во время выполнения алгоритма, выход из программы не происходит, алгоритм продолжает выполняться.
Как сделать чтобы можно было выйти из программы в любой момент времени?

Если можно без "многопоточности" или скажите что это не так страшно и как делать)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2017, 12:12
Ответы с готовыми решениями:

Как создать приложение, которое невозможно закрыть даже завершая процесс
Привет друзья. Обращаюсь к Вам по следующему вопросу: Необходимо сделать не убиваемое консольное приложение т.е. что бы его нельзя было...

Как запустить приложение, которое находится в той же директории, что и собранная программа?
Вопрос в заголовке.

Создать приложение, которое нельзя закрыть
Здравствуйте! Пишу мелкое приложение, в котором устанавливается лимит времени использования ПК. По истечении этого времени происходит...

30
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
01.09.2017, 09:25  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
сначала описываем большие куски - процедуры
Ну большие куски я более менее формирую, ну и то это часто на рефакторинге) Но до уровня подпроцедур ещё ни когда не доходил) В моём понимании это пока остается излишним.

Цитата Сообщение от krapotkin Посмотреть сообщение
а есть словесное описание процесса?
Какого процесса?

Цитата Сообщение от krapotkin Посмотреть сообщение
Exception
Как в Попытке описать условие, не понимаю чет.?. это о closebool или ... Не я вообще не понимаю как это тут применить))

Добавлено через 1 минуту
Цитата Сообщение от Animalia Посмотреть сообщение
M2.Text := SL2.Text;
* FreeAndNil(SL2);
* FreeAndNil(SL); *
* goto ProcedureEnd;
BreakRoutines:
* SaveAllWork;
* goto EndRoutines;
ProcedureEnd:
А тут зацикливания не получится?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
01.09.2017, 09:41
пример из головы
вот так должна выглядеть главная процедура +- 3-5 строк проверки результата каждого этапа
Delphi
1
2
3
4
5
6
7
8
9
procedure MainProc(filename:string);
var Source:TSourceList;
  Words:TWordList;
begin
  LoadWords(Source);
  PrepareList(Source, Words);
  ProcessList(Words);
  SaveResults(Words);
end;
далее просто берем и пишем каждую из упомянутых процедур
так же - сначала по блокам, потом расписываем блоки.
в каждой последней процедуре останется 5-10 строк, в которых ошибиться невозможно

Добавлено через 1 минуту
goto даже на представленном примере - ужас-ужас
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
01.09.2017, 13:00  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ужас-ужас
Цитата Сообщение от krapotkin Посмотреть сообщение
выглядеть главная процедура
так у меня выглядит событие по нажатию кнопки) Которая вызывает процедуры. Тут можно долго говорить о фрактальности, нужна ли она?
Delphi
1
2
3
4
5
6
7
8
Procedure MicroLvl(x, y: integer);
begin
 asm
  mov eax,X
  add eax,Y
  mov Result,eax
 end;
end;

где же следует остановиться, для каждого это свой момент)
0
 Аватар для Animalia
225 / 80 / 35
Регистрация: 01.04.2017
Сообщений: 182
01.09.2017, 13:15
Цитата Сообщение от vino0s Посмотреть сообщение
Есть еще 9 процедур, таких же долгих, и для них используется тот же TProgressBar
Но я то видел только одну
К тому-же жонглировать максимальным значением TProgressBar без явной необходимости думаю нет смысла, а его обработчик довольно тяжелый.

Цитата Сообщение от vino0s Посмотреть сообщение
и вот в подпроцедуре, я не особо понял, мы же StartFrom ни как не возвращаем или я чего-то не понимаю?)
StartFrom это я так обозвал ваш L. Если посмотрите на свою исходную процедуру, то увидите, что L далее и не использвалась. Это полностью ваш код, просто под соусом и приправами, новых строк от меня там нет.

Цитата Сообщение от vino0s Посмотреть сообщение
нет она используется когда Pohozhest не True
Совсем туплю - от компа с делфи далеко а Notepad++ не лучший редактор кода

Цитата Сообщение от vino0s Посмотреть сообщение
Сколько бит на фразу под число выделить
Зачем на фразу? под слово. Одно слово - одно число. Фраза (строка) превращается в динамический массив чисел.
Вот наполнение базы это уже атас. Ибо для каждого слова нужно будет составить список синонимов (я правильно понимаю, что идет замена на синонимы?).
Хотя можно поискать и готовые базы в интернете. А если брать готовую базу, то и от перевода в числа можно отказаться, и всю работу перекинуть на базу.
Т.е. выделили в тексте слово, нашли его в базе, получили список синонимов, заменили.
У ужас потому как переделывать значительную часть логики программы - лично для меня хуже не придумаеш.

Цитата Сообщение от vino0s Посмотреть сообщение
на второй итерации все равно будет -4? или 0? или 1? )))
А проверить и запустить?
Пробежим по всем числам -5 до 10.
Кликните здесь для просмотра всего текста
Начальное значение выставляется только при нормальном старте цикла, и затем сравнивается только конечное значение.
Delphi
1
2
3
4
for i:= x to y do
begin
  ..
end;
I приравняется к X на старте, затем мы можем менять X в теле цикла как захотим, но на сам цикл это не повлияет. А вот с изменением Y стоит быть осторожнее.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
01.09.2017, 13:26
Цитата Сообщение от Animalia Посмотреть сообщение
А вот с изменением Y стоит быть осторожнее.
я протестировал и ответственно заявляю: ничего подобного
судя по результатам исследований, максимальное значение счетчика цикла запоминается сразу, а потом с игреком можно делать что угодно, количество итераций цикла не меняется (кстати, в каком учебнике об этом есть упоминание? )
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y,i: byte;
begin
  x:= 1;
  y:= 10;
  for i:= x to y do
  begin
    Memo1.Lines.Add(Format('i = %d; y = %d',[i,y]));
    Dec(y);
  end;
end;
Миниатюры
Как закрыть приложение, которое находится в процессе выполнения алгоритма?  
1
 Аватар для Animalia
225 / 80 / 35
Регистрация: 01.04.2017
Сообщений: 182
01.09.2017, 13:28
Delphi
1
2
3
4
5
6
7
8
Procedure MicroLvl(x, y: integer);
begin
 asm
  mov eax,X
  add eax,Y
  mov Result,eax
 end;
end;
Result - зерезервированное имя переменной, и используется только для Function. И выдается как правило в EAX. Параметров только два, поэтому передача будет через регистры EAX и EDX. begin перед asm можно не ставить. Итого получим:
Delphi
1
2
3
4
Function MicroLvl(x, y: integer): integer;
asm
  add EAX, EDX
end;
Тут смысла дробить нет.
Для себя логический блок я определяю по оставленным коментариям. Когда на небольшой кусок кода лиш одна строчка коментария обьясняет что здесь творится - это и есть лог. блок в моем понимании. Хотя ассемблерные вставки исключение - тут я и каждую строку могу коментарием покрыть, чтоб потом не вспоминать
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
01.09.2017, 13:48
эта песня стара как мир
я ничего не буду менять, но хочу, чтобы все поменялось само
я даже не собираюсь настаивать.
0
01.09.2017, 13:51

Не по теме:

Цитата Сообщение от DenNik Посмотреть сообщение
я протестировал и ответственно заявляю: ничего подобного
судя по результатам исследований, максимальное значение счетчика цикла запоминается сразу, а потом с игреком можно делать что угодно, количество итераций цикла не меняется (кстати, в каком учебнике об этом есть упоминание? )
Может быть.
У меня из учебников: мышка, клавиатура и компилятор. А в качестве учителя - природное любопытство. :)

Вот только если в тело цикла перейти по метке, конечное значение в виде переменной становится вообще бесполезным - зависает намертво.

0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
01.09.2017, 14:00  [ТС]
Цитата Сообщение от Animalia Посмотреть сообщение
TProgressBar без явной необходимости думаю нет смысла
Я скажу более, его еще и теле цикла надо переназначать, ибо количество строк уменьшается ( delete )

Цитата Сообщение от Animalia Посмотреть сообщение
StartFrom это я так обозвал ваш L
Ага, я просто не привык длинные названия (потом увидел где второй раз написана), они конечно может быть и понятней, НО СТРУКТУРА РАСПЛЫВАЕТСЯ в лишних символах)) Ну я так привык просто)

Цитата Сообщение от Animalia Посмотреть сообщение
Одно слово - одно число
Ну это у меня от метода хеширования осталось, ну там алгоритм конечно немного другой, ладно.. относительно этой задачи: а как мне использовать эту таблицу для других словоформ? "Бездна" - в словаре под цифрой "1", в Списке фраз записана как "Бездной", Pohozhest сказала бы что True, но сравнивать "Бездной" с "1", явно не True. А если записывать все слова (т.е. если "Бездной" записана как "2", то тут слишком много будет, бесконечно я бы сказал, объяснять почему много не буду, но больше чем заявил Гугл, и больше на Пару Троек Порядков)
Цитата Сообщение от Animalia Посмотреть сообщение
я правильно понимаю, что идет замена на синонимы
Прочел дальше, можно выше уже не не рассматривать, то что писал)) Вообще будет формироваться таблица замен. Но тут не обязательно на синонимы, больше по словоформам) Синонимы это когда-то потом будет...
Цитата Сообщение от Animalia Посмотреть сообщение
Т.е. выделили в тексте слово, нашли его в базе, получили список синонимов, заменили.
Немного по другому: Выделили слово, через Похожесть нашли слово в базе, так... стоп... А, ну да. У вас верно описано. Чуется мне это не вариант, обход по базе в момент поиска этого слова может оказаться значительно дольше, тут все таки надо методы поиска использовать (к примеру хеширование) тогда большая часть таблицы отсечётся, а стало быть хранить просто номер слова (типа "1") не лучший вариант. Это можно обсудить)))

Цитата Сообщение от Animalia Посмотреть сообщение
У ужас потому как переделывать значительную часть логики программы
Да по мне так это кажется только))) Функции, то они функции)) Нужно будет просто добавить одну)) И в 9 местах добавить) Ну возможно часть кода закоментить...

Цитата Сообщение от DenNik Посмотреть сообщение
максимальное значение счетчика цикла запоминается сразу, а потом с игреком можно делать что угодно
Поэтому циклы While лучше этих конченных For, сколько раз себе говорил, но все равно поддаюсь простоте использования... Щас увидел, и теперь есть желание, даже в том куске кода изменить, (на самом деле там где ПрогрессБары) И выше как раз писал ситуацию)

Цитата Сообщение от Animalia Посмотреть сообщение
Result - зерезервированное имя переменной
За это конечно спасибо) Но это мой первый когда на Assemblere) с Просторов Интернета) И смысл его в том, что функционировать код можно и до Ассемблера... Вопрос рациональности)

Цитата Сообщение от Animalia Посмотреть сообщение
логический блок я определяю по оставленным коментариям
Комментариями я только лишний код убираю) Ну еще иногда для поиска мест по коду и очень редко для пояснения функций, если уж только на "первописных" где вся суть проги сворачивается в одну кнопку, без каких либо функций и процедур)))) Проверили, сработало - можно оптимизировать)

Добавлено через 4 минуты
Цитата Сообщение от vino0s Посмотреть сообщение
в лишних символах)
Я допускаю для себя только в логических переменных) Остальное как удобней, в глубоких функциях минимальными символами. глобальные счетчики к примеру через дописку _i, а перед ней может быть и w_i, и word_i, was_i (если на w несколько переменных) Ну не работать мне программистом) Я пробовал, попал в 1С, скукотища, да и все равно был один программист, поэтому там тоже больно не заморачивался по поводу переменных))
0
 Аватар для Animalia
225 / 80 / 35
Регистрация: 01.04.2017
Сообщений: 182
01.09.2017, 14:40
Цитата Сообщение от vino0s Посмотреть сообщение
Ну не работать мне программистом)
Та все равно, я вообще связист. Но вот когда открываеш свой код давности пары лет, хочется чтоб кто нибудь отвесил подзатыльника - за безобразные названия переменных.

Цитата Сообщение от vino0s Посмотреть сообщение
Немного по другому: Выделили слово, через Похожесть нашли слово в базе, так... стоп...
Нет. Просто выделили слово (желательно первообразную форму), и спросили у базы. Она сама найдет - ей виднее. Если нашла - спрашиваем синонимы.
Посмотрите здесь добрый человек выложил свою базу синонимов. Эта одна из первых что в гугле нашлась.

Прикол с циклами кому интересно.
Отдельное спасибо DenNik за пиннок в нужном направлении.
Когда границами цикла служат переменные. Пьеса в 6 действиях
Кликните здесь для просмотра всего текста
  1. Помещаем в регистр ESI конечное значение
  2. Отнимаем от ESI начальное значение
  3. Отрабатываем тело цикла
  4. Прибавляем (downto отнимаем) к счетчику 1
  5. Отнимаем от ESI 1
  6. Проверяем на равенство 0
Но! Последним у нас был ESI, а значит и проверка на 0 относится к нему.

Вывод: когда в роли границ цикла выступают переменные, на этапе старта цикла вычисляется число конечных итераций цикла. И в последствии переменные границ, равно как и переменная счетчика цикла не оказывают влияния на сам цикл.
Т.е. внезапно конструкция вида
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  i, x,y: integer;
  q: PInteger;
begin
  x := 0;
  y := 10;
  q := @i;
  for i:= x to y do
  begin
    q^:= i+1;
    memo1.Lines.Add(inttostr(i));
  end;
end;
оказывается вполне рабочей.
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
01.09.2017, 15:00  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
я ничего не буду менять, но хочу, чтобы все поменялось само
я даже не собираюсь настаивать
Дождемся рефакторинга))) Когда вдруг больше добавить нечего, а кодить хочется, и идей новых нет, рефакторинг - веселье в переписке кода))

Добавлено через 3 минуты
Цитата Сообщение от Animalia Посмотреть сообщение
Посмотрите здесь добрый человек
Человек конечно добрый)
Где-то я писал, но че то не найду, ладно, в общем там не только синонимы, и словоформы, там могут быть слова "л" "бо" "бу" и слова с ашибками)))
Это не исконно рускей крч язык, а современный - бестАлковый)

Добавлено через 3 минуты
Цитата Сообщение от Animalia Посмотреть сообщение
Т.е. внезапно конструкция вида
Страсти какие: адреса, указатели)) Когда нибудь, когда пойму их смысл, начну применять в своих поделках) Лучшее время конечно же сейчас) Но кто подскажет лучший практический смысл их применения?

Добавлено через 3 минуты
Ну и ещё немного про метки и goto - метка не является переменной? ) но на нее распространяются правила переменных (глобал, локал), При закрытии приложения, если я явно сам не освободил память от использования каких-то переменных, то она же все равно освободится?) или до перезагрузки будет занято?

Добавлено через 3 минуты
И вопросик: Кто любит переписывать код? ))) *
*последнее творение переписывал 2 раза))) сейчас с учетом всего всего 15.5к строчек) Ожидается финальный рефакторинг - сокращение 1/3 строк (объединить одинаковые событийные процедуры у разных объектов) Ну и ваше наставничество выше))) Даешь подпроцедуры!, но что то пока организм их отрицает)

Добавлено через 5 минут
Скоро начну тему по прокси)) Это вообще сложно? * TChrome придется ли добавлять вкладку? * или же добавлять нужно будет дополнительный объект TChromium, а если список прокси серверов скажем 50, то 50 TChromium?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2017, 15:00

Приложение находится в режиме приостановки выполнения
Программа обрабатывает огромный массив данных. При запуске отладки через пару минут появляется сообщение: Приложение находится в режиме...

Написать приложение (с использованием семафора), которое не дает закрыть любой exe файл, пока запущено
Написать приложение с использованием семафора, которое пока запущено не дает закрыть exe файл( любой). При попытке закрыть exe приложение...

Отладка WPF приложения. Приложение находится в режиме приостановки выполнения
всем привет. отлаживал приложение WPF. Во время очередного запуска приостановил выполнение и появилось предупреждение "Приложение...

Как закрыть поток в чужом процессе зная адрес этого потока
Здравствуйте, я хочу закрыть поток в чужом процессе зная адрес потока (test.dll!test001+0x60520), как это можно сделать ?? Заранее...

Как закрыть поток в чужом процессе зная адрес этого потока
Здравствуйте, я хочу закрыть поток в чужом процессе зная адрес потока (test.dll!test001+0x60520), как это можно сделать ?? PS: В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru