Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1340089952
Омлет
2012-06-19 11:12
2013.03.22
Почему FreeAndNil такой, какой он есть?


2-1331717137
QWERTY_
2012-03-14 13:25
2013.03.22
сравнение crc32


15-1334694230
Дмитрий С
2012-04-18 00:23
2013.03.22
Дельфи не может перезаписать EXE файл.


6-1262861262
__Алексей__
2010-01-07 13:47
2013.03.22
Глюки ARP-кеша и получение MAC существующих хостов


15-1348432202
Юрий
2012-09-24 00:30
2013.03.22
С днем рождения ! 24 сентября 2012 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский