Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизЗависание на function InitAllocator Найти похожие ветки
← →
Remand (2012-07-09 11:40) [0]Сталкиваюсь с прошлогодней проблемой: зависает на
for i:= low(smallTab^) to high(smallTab^) do
smallTab[i] := nil;
в интернете пишут, что такое может появится после каких-то обновлений безопасности.
Функция из GETMEM.INC
function InitAllocator: Boolean;
// Initialize. No other calls legal before that.
var
i: Integer;
a: PFree;
begin
try
InitializeCriticalSection(heapLock);
if IsMultiThread then EnterCriticalSection(heapLock);
MakeEmpty(@spaceRoot);
MakeEmpty(@decommittedRoot);
MakeEmpty(@committedRoot);
smallTab := LocalAlloc(LMEM_FIXED, sizeof(smallTab^));
if smallTab <> nil then begin
for i:= low(smallTab^) to high(smallTab^) do
smallTab[i] := nil;
a := @avail;
a.next := a;
a.prev := a;
rover := a;
initialized := True;
end;
finally
if IsMultiThread then LeaveCriticalSection(heapLock);
end;
result := initialized;
end;
← →
Сергей М. © (2012-07-09 19:52) [1]> в интернете пишут
Тебе лично пишут ?
← →
Германн © (2012-07-10 02:36) [2]
>
> Remand (09.07.12 11:40)
>
> Сталкиваюсь с прошлогодней проблемой: зависает на
> for i:= low(smallTab^) to high(smallTab^) do
> smallTab[i] := nil;
Давайте подождём ещё год. Может тогда всё будет понятнее!?
← →
Remand (2012-07-10 07:08) [3]
> Тебе лично пишут ?
не лично, у кого-то подобная проблема была, но ответа так никто и не дал.
> Давайте подождём ещё год. Может тогда всё будет понятнее!
> ?
в том году программаспустя месяц стала запускаться
А если по существу у кого-нибудь будут идеи что изменить/удалить (обновления)? и с чем связано это зависание?
← →
sniknik © (2012-07-10 07:17) [4]> и с чем связано это зависание?
на 99.8% с ошибкой в твоем коде. искать конечно приятнее там где светлее.
выделение памяти делается в любой программе, т.е. если бы зависело от системной библиотеки и безопасности то "висли" бы все программы написанные на дельфе (это как минимум, по максимуму вообще все. это происходит?).
← →
sniknik © (2012-07-10 07:24) [5]http://www.delphimaster.net/view/15-1195213340/all
← →
sniknik © (2012-07-10 07:31) [6]+
менеджер памяти можно заменить на FastMM, заодно она и правильность выделения в проге отслеживает.
а может даже глюк "замажет" т.к. работает по другому.
← →
Плохиш © (2012-07-10 10:44) [7]
> Сталкиваюсь с прошлогодней проблемой: зависает на
> for i:= low(smallTab^) to high(smallTab^) do
> smallTab[i] := nil;
>
Странно, как границы интересуют, то спрашивают у выделенной памяти, а как к элементам обращаться, так подсовывают указателю.
PS. Советую прочитать руководство программиста раздел о использовании встроенного отладчика
PPS.
> в том году программаспустя месяц стала запускаться
Может пора нанять программиста?
← →
Remand (2012-07-10 11:38) [8]Дело в том что программа время от времени работала. Потом стала зависать,т.е. exe-ком я уже пользуюсь года 4. Только в последий год стала такая ерунда.
← →
Remand (2012-07-10 11:39) [9]OriginalWordBreakProc := Pointer( SendMessage( DBMemo1.Handle,
EM_GETWORDBREAKPROC, 0, 0 ) );
{$IFDEF WIN32}
NewWordBreakProc := @MyWordBreakProc;
{$ELSE}
NewWordBreakProc := MakeProcInstance( @MyWordBreakProc, hInstance );
{$ENDIF}
SendMessage( DBMemo1.Handle, EM_SETWORDBREAKPROC, 0,
Longint( NewWordBreakProc ) );
AddFontResource(PChar(".\bg_files\item_files\typewriter_font.tpf"));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
на последней строке виснет, если ее убрать то все нормально. Что не так?
← →
Remand (2012-07-10 11:44) [10]т.е. здесь я загружаю свой шрифт и потом выгружаю
RemoveFontResource(PChar(".\bg_files\item_files\typewriter_font.tpf"));
SendMessage( DBMemo1.Handle, EM_SETWORDBREAKPROC, 0,
Longint( @OriginalWordBreakProc ) );
{$IFNDEF WIN32}
FreeProcInstance( NewWordBreakProc );
{$ENDIF}
P/S еще стала музыка/звуки в приложении заикаться/щелкать, как будто подвисает.
← →
sniknik © (2012-07-10 14:17) [11]> SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
> ... Что не так?
синхронный броадкаст? ... даже если так можно, это неправильно.
← →
Remand (2012-07-10 16:13) [12]не подскажите, как надо?
← →
sniknik © (2012-07-10 16:31) [13]кто кроме тебя знает "как надо"? логика твоя, если хочешь/надо ждать результат то... но только тогда не жалуйся на задержку.
асинхронно/событие без ожидания делается через PostMessage.
← →
Remand (2012-07-10 18:52) [14]Сменил на асинхронно. Работает нормально без задержек.
← →
Anatoly Podgoretsky © (2012-07-11 07:30) [15]Ни разу даже не привено определение smallTab
Видимо сильно хочет решить проблему
← →
sniknik © (2012-07-11 07:58) [16]> Ни разу даже не привено определение smallTab
это из стандартного GETMEM.INC, вряд ли ошибка там(хотя, код странный, ИМХО), но -const
cAlign = 4;
cSmallSize = 4*1024;
type
PFree = ^TFree;
TFree = packed record
prev: PFree;
next: PFree;
size: Integer;
end;
TSmallTab = array [sizeof(TFree) div cAlign .. cSmallSize div cAlign] of PFree;
VAR
smallTab : ^TSmallTab;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.062 c