Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как очистить память от выполненых процессов?

10K
18 апреля 2005 года
encore
4 / / 18.04.2005
Подскажите пожалуйста, проблема такова: есть программа создающая определённое количество потоков, после завершения обработки одного потока он закрывается и создаются следушие и т.д.
Процесс довольно долгий и после длительной работы программа занимает много памяти и работает очень туго в плоть до сильной загрузки ОС. как правильно вычистить, переменные которые создавали ранее запущеные процессы, и сам процесс?
302
18 апреля 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by encore
Подскажите пожалуйста, проблема такова: есть программа создающая определённое количество потоков, после завершения обработки одного потока он закрывается и создаются следушие и т.д.
Процесс довольно долгий и после длительной работы программа занимает много памяти и работает очень туго в плоть до сильной загрузки ОС. как правильно вычистить, переменные которые создавали ранее запущеные процессы, и сам процесс?


Написать правильный код, где потоки будут завершаться не принудительно из вне, а "своей смертью", когда поступает соответствующее событие (Event). Соответственно, тогда локальные для потока ресурсы должны создаваться и удаляться в потоке.

Кстати, а у тебя потоки с GDI случаем не работают? Может ты ресурсы GDI исчерпываешь?

10K
18 апреля 2005 года
encore
4 / / 18.04.2005
Цитата:
Originally posted by Sagittarius
Написать правильный код, где потоки будут завершаться не принудительно из вне, а "своей смертью", когда поступает соответствующее событие (Event). Соответственно, тогда локальные для потока ресурсы должны создаваться и удаляться в потоке.

Кстати, а у тебя потоки с GDI случаем не работают? Может ты ресурсы GDI исчерпываешь?



У меня потоки создают API сокеты и ешё из них выводятся локальные данные что бы контролировать процесс(Количество потоков в работе, количество отработаных потоков и т.д.)

10K
18 апреля 2005 года
encore
4 / / 18.04.2005
и в
.Execute;
begin
...
end;

присутствует: try Terminate except end;
303
19 апреля 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by encore
и в
.Execute;
begin
...
end;

присутствует: try Terminate except end;


Не надо использовать Terminate, просто завершай процедуру Execute (например, с помощью Exit). Кроме того, посмотри, завершаются ли потоки в TaskManager'е.

373
21 апреля 2005 года
unmoved
216 / / 28.11.2004
Цитата:
Originally posted by makbeth
Не надо использовать Terminate, просто завершай процедуру Execute (например, с помощью Exit). Кроме того, посмотри, завершаются ли потоки в TaskManager'е.


А если допустм поток запустил функцию из DLL, как его тогда завершить в теле? А функция Terminate поток не убъет, а всего лишь сгенерирует исключение. Используй API функцию для убиения гадов(TerminateTread).

303
22 апреля 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by unmoved
А если допустм поток запустил функцию из DLL, как его тогда завершить в теле? А функция Terminate поток не убъет, а всего лишь сгенерирует исключение. Используй API функцию для убиения гадов(TerminateTread).


Так, так... Посмотрим, что скажет на это Microsoft...
TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated. DLLs attached to the thread are not notified that the thread is terminating.

TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination.

То есть использование этой функции не есть гут. Поток, запустивший функцию из DLL, должен по ее корректному завершению должен получить управление обратно, или я не прав? ;)

373
22 апреля 2005 года
unmoved
216 / / 28.11.2004
Цитата:
Originally posted by makbeth
То есть использование этой функции не есть гут. Поток, запустивший функцию из DLL, должен по ее корректному завершению должен получить управление обратно, или я не прав? ;)



Да должен по идеи, но допустим в dll шифруется файл, а пользователь решил прекратить процесс, в таком случаи я передаю в dll сигнал отмены, по сылке конечно(var) и она завершается. А вообще в Visual C++ есть функции килленга процессов, а в Delphi нет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог