|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
|
Как закрыть приложение, которое находится в процессе выполнения алгоритма?31.08.2017, 12:12. Показов 2689. Ответов 30
Метки нет (Все метки)
Привет!
В программе используется алгоритм преобразования строковых данных. Этот процесс может длиться пару суток. В Процедуру которая выполняет этот алгоритм передается переменная, с помощью которой можно продолжить работу с последнего места. Данные автоматически сохраняются каждые 10 минут и при выходе из программы. Когда нажимаю кнопку выйти во время выполнения алгоритма, выход из программы не происходит, алгоритм продолжает выполняться. Как сделать чтобы можно было выйти из программы в любой момент времени? Если можно без "многопоточности" или скажите что это не так страшно и как делать)
0
|
|
| 31.08.2017, 12:12 | |
|
Ответы с готовыми решениями:
30
Как создать приложение, которое невозможно закрыть даже завершая процесс Как запустить приложение, которое находится в той же директории, что и собранная программа? Создать приложение, которое нельзя закрыть |
|
Житель Земли
|
|||
| 31.08.2017, 13:01 | |||
Сообщение было отмечено vino0s как решение
Решение
1
|
|||
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
|
| 31.08.2017, 13:06 [ТС] | |
|
Ага всё шикарно, только у меня процедура не принадлежит TForm: тогда с флагом не получится, я полагаю. Есть ли решение для таких случаев?
Ну я конечно просто изменю процедуру на TForm. Спасибо!
0
|
|
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
|||||||||||||
| 31.08.2017, 13:51 [ТС] | |||||||||||||
Или как тут можно сделать? Добавлено через 1 минуту ну вот к слову эта функция вызывается один раз, и дальше погружается в процесс. Если бы я ее к примеру вызывал часто, тогда можно было бы передавать параметром closebool. Добавлено через 15 минут Скажем если я передал параметр глобальной (Формы) переменной, то во время выполнения работы я могу на них повлиять, Если сами функции не описаны в классе Формы?
0
|
|||||||||||||
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
||||||
| 31.08.2017, 13:55 [ТС] | ||||||
|
Чет не получилось)
0
|
||||||
|
Житель Земли
|
||||||
| 31.08.2017, 13:58 | ||||||
|
говорю же - в цикле!
это один из многих вариантов
0
|
||||||
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
|||||||||||||
| 31.08.2017, 16:16 [ТС] | |||||||||||||
|
Сейчас проверю, тут просто каждый внешний цикл занимает около 5 минут. А вложенный достаточно быстр (сек 5-10). Хотелось бы прерываться на вложенном. Добавлено через 5 минут В общем для начала о самом "выходе" - ваша реализация работает. Но если убрать те строчки, что добавил я - то не работает. А теперь о самом сочном, о самой процедуре - она теперь не выполняет свою работу... =) Добавлено через 2 минуты Добавлено через 1 минуту
Вопрос открытый. Реализация выхода решена, в ущерб самой функции) Что естественно не радует) Почему он стал пропускать выполнение "долгой" обработки и начал строчить как с пулемета? Добавлено через 58 минут да не и сама муть даже эта не верно выстроена. Надо добавлять еще один флаг на окончание работы функции. Добавлено через 1 минуту
0
|
|||||||||||||
|
|
|
| 31.08.2017, 17:09 | |
|
вот конкретно в этом коде нужно применять правильные названия переменных, отвязку интерфейса от логики и выделение логических блоков кода в отдельные процедуры
после этого прямо все станет ясно
0
|
|
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
||||||||||||||||
| 31.08.2017, 18:36 [ТС] | ||||||||||||||||
|
Там у меня большой список заменился на малый, поэтому все стало летать быстро Добавлено через 8 минут
Добавлено через 4 минуты Добавлено через 8 минут Добавлено через 48 минут Добавлено через 1 минуту ага, увидел косяк, условие не в цикле for. Добавлено через 10 минут Вот рабочий вариант, для моего случая.
Теперь можно поговорить о философии кода) А вот про MVC модель и логические блоки, по подробнее, пожалуйста)) Конкретно для этого кода.
0
|
||||||||||||||||
|
225 / 80 / 35
Регистрация: 01.04.2017
Сообщений: 182
|
||||||||||||||||||||||
| 31.08.2017, 19:01 | ||||||||||||||||||||||
|
Как вариант переделать на безальтернативный вариант как уже предложили
Ну или (прям уже чую как прицельным огнем полетели тапки) использовать Goto, тут все вообще может быть прекрасно. Завели отдельный кусок кода который сохранит все что надо и переходите на него вместо break'а
Хинт: кусок кода с 22 строки
0
|
||||||||||||||||||||||
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
||||||||
| 31.08.2017, 19:43 [ТС] | ||||||||
|
Вся попа (5 мин) начинается когда идет обработка списка 80к строк: каждая строка состоит от 2-х до 7-ми слов, каждую строку разбиваем на слова, ищем совпадение по списку замены ( от 1 до 4-х слов), и если есть совпадение заменяем слово, затем собираем строку. и идем дальше. Ну можно тут задачку на подумать написать)) Если есть желание у кого-то решить, я буду рад)) Начальные параметры: Список фраз ( отсортирован по количеству слов в строке: от 2-х до 7-ми, слова в каждой строке отсортированы по алфавиту a-z,а-я) = в коде М2, Список различных слов, которые могут встретиться в М2 ( по одному слову в строке, отсортированы по алфавиту ) = в коде М, Список слов замены (формируется через функцию Pohozhest) = в коде Mr. Задача: Заменить похожие слова в Списке фраз М2. Алгоритм: 1) Выявляем различные слова из списка М2 => М (это уже сделано заранее, процесс тоже довольно длительный, есть оптимизация, к задаче не относится) 2) Проходим по Списку различных слов М и заполняем Список замен Mr, пока выполняется Pohozhest (здесь все таки придется изменить на полный обход списка различных слов, но пока так...) Первое "слово" является словом для замены, фиксируем его в переменную vr и удаляем из Списка замен. 3) Проходим по Списку фраз 3.а) каждую строку разбиваем на слова (НУЖНО чтобы не заменялось слово "БЕЗДНА" на слово "БЕЗ" к примеру, если не понятно, в общем на слова разбиваться нужно! ) 3.б) сравниваем каждое слово на совпадению по Списку замен 3.в) если находим заменяем Идея: Сортировка по количеству слов, достаточно быстрая ( в сравнении с двумя сутками ) можно сократить время сокращая количество строк в списке фраз, Если список фраз отсортировать по алфавиту, а каждая строка также отсортирована по алфавиту, тогда, к примеру, проходя слово на букву М, будем проходить список фраз от А до буквы Н, конечно при букве Я придется пройти весь список, но для буквы А, все кончится довольно скоро (До Б) ![]() Если есть Идеи пишите) Добавлено через 1 минуту Добавлено через 4 минуты Так а по поводу Goto: у меня таких функций и процедур, которые могут длиться от часа до нескольких суток, несколько) Их я уже привел к TForm, было бы не плохо путем "вставления" небольшого когда добиваться результата (т.е. не несколько строчек вставлять в начало, конец и середину, а небольшой блок, в конец например) Вот у меня чутьё что это Goto может помочь))) Хотелось бы узнать о подводных камнях с этим оператором, по части памяти, ну и вообще. Добавлено через 2 минуты да и вообще может есть готовый быстрый велик по описанной задаче? Добавлено через 7 минут вообще в голове зародилась таблица из 7 столбиков, вот я код находил:
0
|
||||||||
|
225 / 80 / 35
Регистрация: 01.04.2017
Сообщений: 182
|
||||||||
| 31.08.2017, 23:31 | ||||||||
|
По мере роста обьема кода вполне логично разделить процедуру на другие, более мелкие, процедуры, которые выполняют только свою определенную роль. Это проще как в написании кода, так и в отладке - найти ошибку в 3 строках кода, легче чем найти ошибку на 3 страницах. Конкретно в вашем случае лично я вижу два куска кода которые вообще дублируются, и могут быть заменены на локальные процедуры. Кликните здесь для просмотра всего текста
не обратил внимания, то второй if за else стоит.По поводу оптимизации алгоритма вопрос есть. Как обрабатываются варианты склонений? Тоесть "бездна" и "бездной" это разные или одинаковые слова? Как вариант (который с вероятностью 99% будет отброшен): Кликните здесь для просмотра всего текста
1. создать базу слов: одно слово = одно число. База может быть общей и пополняемой это ее несомненный плюс - нет необходимости создавать ее при каждом запуске и т.д.
2. Входной текст преобразуем в массив чисел соответствующим словам в базе. 3. Всю работу что вы описали для слов производим для массива чисел. 4. Преобразуем числа в слова. Не смотря на ужас от обьема работы есть один несомненный плюс - поиск, сравнение, замена числа в массиве происходит в сотни раз быстрее чем работа со строками. Если верить гуглу в русскоя языке 131 257 общеупотребимых слов, поэтому поиск по базе обещает быть очень быстрым. Но вопрос в том, сумеем ли привести слова в тексте к начальной форме? С Goto есть только одна проблема - с памятью. Памятью программиста Мы можем выйти из середины всех циклов, не удалить обьекты или наоборот удалить, а затем вернуться в место где они (обьекты) используются. Все это надо помнить при работе с Goto.Некоторые критикуют за использование Goto. Но что бы не говорили, большинство кода это линейные куски которые выполняются строчка за строчкой. Циклы и условные операции вносят разнообразие давая 'вторую координату'. Процедуры и функции только заменяют несколько строк одной, но опять на линейность не особо влияют. Goto рвет шаблон, лихо заворачивая простыню кода, соединяя ее "червоточинами". И вот с этой "мятой простыней" и придется иметь дело. Готовы вы на этот подвиг/безумство или нет решать только вам. IMHO.
1
|
||||||||
|
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
|
||
| 01.09.2017, 01:50 | ||
|
Ну в общем и целом ответ такой - использовать GoTo никем не запрещено. А иногда его использование позволяет сделать исходник наиболее компактным и следовательно более понятным на взгляд. Но в этом случае нужно твердо помнить, что компилятор Дельфи(Паскаля) нам тут ничем не может помочь в плане подсказки о неверных переходах. Так что всё должны контролировать мы сами.
1
|
||
| 01.09.2017, 06:17 | |||||||
|
Не по теме:
Кликните здесь для просмотра всего текста
0
|
|||||||
|
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
|
||||||||||||||||
| 01.09.2017, 07:55 [ТС] | ||||||||||||||||
|
Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 1 минуту Но в целом понял конечно) Любой повторяющийся код надо приводить к функции/процедуре. Только со СтартФром подробнее) По-моему оно не сработает Добавлено через 2 минуты На установленных - да, одинаковые. Добавлено через 16 минут
Добавлено через 2 минуты
0
|
||||||||||||||||
|
|
|
| 01.09.2017, 09:06 | |
|
а есть словесное описание процесса?
чаще всего оно является достаточным для проектирования "сверху вниз" сначала описываем большие куски - процедуры потом в каждой процедуре более конкретно и так до конца. получается нормальная стройная структура а вместо любого goto отлично работает Exception причем есть "тихие" exception типа EAbort
0
|
|
| 01.09.2017, 09:06 | |
|
Помогаю со студенческими работами здесь
20
Приложение находится в режиме приостановки выполнения Написать приложение (с использованием семафора), которое не дает закрыть любой exe файл, пока запущено
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|