Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 20:52   #1
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
Вопрос Прерывание процедуры

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

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

Нужно сделать что-то вроде как в php, при превышении некоторого времени, нужно прервать выполнение.
Вставлять внутри функции if flag then exit не вариант, технически невозможно.

У меня в мыслях пока крутятся 2 варианта.

Первый. Если запихнуть выполнение функции в поток, и при необходимости вызывать уничтожение, но тогда все не освобожденные объекты, останутся в памяти. Не могу найти возможность получить память, которая выделяется потоком, что бы её потом освободить вручную.

Второй. Запихнуть функцию в отдельное приложение, и просто завершать его. Но не знаю о корректности такого метода.
carno вне форума Ответить с цитированием
Старый 31.10.2011, 20:55   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Какие результаты возвращаются функцией?
я имею ввиду Result что содержит? (return в Си)
psycho-coder вне форума Ответить с цитированием
Старый 31.10.2011, 21:11   #3
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

строку string
carno вне форума Ответить с цитированием
Старый 31.10.2011, 21:28   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Черт(( Мой способ не прокатит. Там булев тип нужен
уж извини, тут помочь не смогу
psycho-coder вне форума Ответить с цитированием
Старый 31.10.2011, 21:29   #5
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Поделись пожалуйста своим соображением, очень интересно, как возвращаемый результат может решить проблему?
carno вне форума Ответить с цитированием
Старый 31.10.2011, 21:42   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Я делал в цикле проверку
Код:
while (not unit1.getParameter) do
begin
  Application.ProcessMessages(); // что б не висла
  // а тут хоть таймеры хоть что
end;
psycho-coder вне форума Ответить с цитированием
Старый 31.10.2011, 22:12   #7
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Я делал в цикле проверку
Код:
while (not unit1.getParameter) do
begin
  Application.ProcessMessages(); // что б не висла
  // а тут хоть таймеры хоть что
end;
проблема в том, что если зависнет, то нужно прервать выполнения, т.е. проблема не в зависании самого приложения, а в том, что функция будет выполнятся до завершения работы приложения, а этого не нужно
carno вне форума Ответить с цитированием
Старый 31.10.2011, 22:16   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Мне кажется в мой код не поняли)
Там Application.ProcessMessages(), что бы не висло приложение и в том же цикле идет подсчет количетсва тиков, секунд или прочее. если функция исчерпала лимит времени, грубо ее вырубить.
для этих целей еще можно TTimer прикрутить, я думаю
psycho-coder вне форума Ответить с цитированием
Старый 31.10.2011, 22:18   #9
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Скажу больше, есть серверное приложение, которое обрабатывает кучу запросов пользователей, и есть программеры, которые постоянно обновляют функцию, и если где то есть ошибка, то нужно прервать выполнение функции, иначе служба повиснет, или на крайняк сожрет кучу процессорного времени и оперативы.
carno вне форума Ответить с цитированием
Старый 31.10.2011, 22:19   #10
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Мне кажется в мой код не поняли)
Там Application.ProcessMessages(), что бы не висло приложение и в том же цикле идет подсчет количетсва тиков, секунд или прочее. если функция исчерпала лимит времени, грубо ее вырубить.
для этих целей еще можно TTimer прикрутить, я думаю
Вот и главный вопрос, как прервать функцию, при истечении таймера, при условии, что нет возможности что то вписать в код функции
carno вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прерывание Ирида Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.10.2011 04:36
Прерывание VKorablev Паскаль, Turbo Pascal, PascalABC.NET 5 15.04.2011 21:12
6 прерывание ленусик Фриланс 1 03.06.2008 16:22
6 прерывание ленусик Помощь студентам 5 30.05.2008 16:57