powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateThread и out of memory в delphi 7
16 сообщений из 16, страница 1 из 1
CreateThread и out of memory в delphi 7
    #39541044
Rustam88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

У меня есть приложение на Delphi, в котором создается поток

BEGIN
Hndl:=CreateThread(nil,0,@DispThreadFunc,nil,0,ThID);
if Hndl=0 then showmessage('No thread');
END


В функции DispThreadFunc происходят различные действия, обращения к БД и пр..


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

Однако оно валится с ошибкой Out of memory. No thread. при достижении в диспетчере задач в поле memory определенного значения(уходит на это часов 5-6, может и меньше), - обычно порядка 160 с лишним мб.

Поле memory копится при этом и при достижении значения все валится....


Подскажите пожалуйста куда копать в данном случае, memory так и должен увеличиваться в диспетчере? Это нормально?
Я проверял все действия в функции, - везде память высвобождается, к примеру при обращении к БД и пр.
Есть ли способ с помощью потоков высвобождать память из потока либо другой способ реализации данной задачи?


RAM при этом не перегружен.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541051
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam88,

Код: pascal
1.
IsMultiThread := True;


А еще лучше, последовать совету Рихтера и никогда не вызывать самому CreateThread;
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541076
Rustam88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Добавил вот таким образом

IsMultiThread := True;
Hndl:=CreateThread(nil,0,@DispThreadFunc,nil,0,ThID);

if Hndl=0 then showmessage('No thread');

Память в диспетчере растет также
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541079
Rustam88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

наверное подожду понаблюдаю выпадет ошибка или нет, растет она но уже вроде не так стремительно....

А какой альтернативный вариант можно использовать для этих целей вместо этой потоковой api функции?
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541088
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: pascal
1.
IsMultiThread := True;


Эта переменная и так включается автоматом, смысла её выставлять нет.
Rustam88А какой альтернативный вариант можно использовать для этих целей вместо этой потоковой api функции?
Уже есть обертка над потоком: TThread.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541110
Rustam88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данное решение прекрасно работало на windows xp, windows 7, там конечно возникали иногда такие же ошибки, но очень редко, а тут windows server 2012 64 разрядная.
Хотя компилирую я на 32-х разрядной предварительно, может из-за этого...

Попробую скомпилить на 64 разрядной и поищу альтернативное решение для реализации потока
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541140
NetObserver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam88,
Что приходит на ум
1)Выделение памяти большими кусками. Сталкивался с кодом - выделение\освобождение памяти блоками по ~100 мегов.
Симптомы те же - падение через несколько часов работы с Out of memory. Происходила фрагментация памяти, свободной дофига, но непрерывным блоком в 100 мег выделить невозможно.

2)Для потока задан размер стека по умолчанию, ЕМНИМ это 1 мегабайт. Возможно на каком-то этапе стек переполняется.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541153
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЭта переменная и так включается автоматом, смысла её выставлять нет.Угу. В функции BeginThread. А автор решил сразу дернуть CreateThread
Rustam88А какой альтернативный вариант можно использовать для этих целей вместо этой потоковой api функции?Хотите извращений - вызывайте BeginThread. Хотите по человечески - работайте с TThread
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541154
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman_Vasilisk_
Код: pascal
1.
IsMultiThread := True;


Эта переменная и так включается автоматом, смысла её выставлять нет.

Она выставляется автоматом только при вызове BeginThread, которая в свою очередь вызывается в конструкторе TThread.
Когда я писал Dll, в которой функция вызывалась в разных потоках, то ловил странные ошибки, пока вручную не выставил ее в True, т.к. в Dll не было использования TThread.
Подробнее тут

to Rustam88
Зачем вы используете грабли, если есть класс обертка TThread надо нитями?
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541173
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Угу. В функции BeginThread.
Некоторые вещи со временем начинают восприниматься как само собой разумеющееся.
Потоки практически всегда использую, хоть для чтения/записи файлов.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541290
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam88,
К потокам, способу их порождения, IsMultiThread и т.п. утечки памяти не имеют ни малейшего отношения. Ищи, где ты память выделенную тобой не освобождаешь - это единственный выход.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541293
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam88Я проверял все действия в функции, - везде память высвобождается
Значит твоя проблема неразрешима, можно увольняться.
Rustam88Есть ли способ с помощью потоков высвобождать память из потока
Это набор букв.
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541296
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockIsMultiThread и т.п. утечки памяти не имеют ни малейшего отношениВообще говоря имеет. Представь как будет работать менеджер памяти на многопотоке, который заточен на однопоточную работу
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541297
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_YuRockIsMultiThread и т.п. утечки памяти не имеют ни малейшего отношениВообще говоря имеет. Представь как будет работать менеджер памяти на многопотоке, который заточен на однопоточную работу
Как-как. Недолго)
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541301
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteПодробнее тут Тут еще более печально. Три года ошибку искал
...
Рейтинг: 0 / 0
CreateThread и out of memory в delphi 7
    #39541309
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_X-CiteПодробнее тут Тут еще более печально. Три года ошибку искал
Это ответ на вопрос, зачем IsMultiThread включать вручную, если она включается автоматом. В dll её ручное включение вообще строго обязательно, я бы сказал, т.к. заранее часто неизвестно, откуда и когда будут вызываться её функции в будущем.
За исключением, конечно, случаев, когда менеджер памяти (на который влияет IsMultiThread) не используется.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateThread и out of memory в delphi 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]