Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2006-02-27 15:53:59 ЛС | профиль | цитата
Ну блин
Штука по п.2 предыдущего поста не всегда срабатывает.
А именно: При выполнении InitMan.Init может оказаться, что в него добавляются новые инициализаторы, и снова вызывается он же...

Такая смертельная рекурсия. Примеры: exampleDrawMove2.sha, exampleDrawMove3.sha

Переделал совсем TInitMan:
[code:1]unit Share; ..................
TInitMan = object
private
Items:array of TInitProc;
Run:boolean;
public
procedure Add(Proc:TInitProc);
procedure Init;
end;
..................
var Null:THI_Event;
GHandle:cardinal;
InitMan:TInitMan;
_data_Empty:TData;
..................
procedure TInitMan.Add;
begin
SetLength(Items,length(Items)+1);
Items[high(Items)] := Proc;
end;

procedure TInitMan.Init;
begin
if Run then exit;
Run := true;
while length(Items)>0 do
begin
Items[0];
Items:=Copy(Items,1,high(Items));
end;
Run := False;
end;[/code:1]

Вроде работает.............
карма: 9

0