Entwickler-Ecke

Windows API - Stack erhöhen


Bergmann89 - Do 21.02.08 16:40
Titel: Stack erhöhen
HI,

ich wollt ma fragen ob's ne Möglichkeit gibt den Stack zu erhöhen?!
Ich bastel grad n bisl mit OpenGL rum, und wenn ich da zu viele Objekte
anzeigen lasse kommt Stack Überlauf.

MfG & Thx Bergmann.


Allesquarks - Do 21.02.08 16:47

Du kannst in den Projektoptionen die Größe des dir zur Verfügung stehenden Stacks ändern.
Wobei ich auch auf jeden fall checken würde ob da nicht irgendwas schiefläuft, den naus natürlichen Gründen ist das bei mir noch nicht passiert.


Xentar - Do 21.02.08 16:55

Geht in den Projektoptionen -> Linker.
Aber normalerweise sollte der Standardwert ausreichen. An deiner Stelle würd ich mir also lieber überlegen, ob das Konzept in Ordnung ist, statt nur die Symptome zu beheben.


Bergmann89 - Do 21.02.08 16:59

Danke, es geht!
ich hab ca 100 Kugeln, die aneinander abprallen und
sich (fast) physikalich richtig verhalten, ich glaub
da darf der Stack schonma überlaufen xD

MfG Bergmann.


BenBE - So 24.02.08 14:48

Nope, darf er nicht ;-)

Ggf. kannst Du ja mal die Codestelle zeigen, mit der Du diese Berechnung durchführst, vielleicht gibt es da auch eine iterative Variannte, die zum gleichen Ergebnis kommt.


Bergmann89 - So 24.02.08 14:57

HI,

der Code war so bei GLScene dabei, den hab ich nich selber geschreiben.
Soweit bin ich nich nich, dass ich das so hinbekomm^^
Aber wenn dus wissen möchtest:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Cube(X,Y,Z,Width,Height,Depth:Real);
var
  cube : TGLCube; //Würfel im GLScene
begin
  cube:=TGLCube(ODEObjects.AddNewChild(TGLCube)); //Als Child von ODEObjects (DummyCube) erzegen
  cube.Position.SetPoint(X,Y,Z); //Position festlegen
  cube.CubeWidth:=Width; 
  cube.CubeHeight:=Height;
  cube.CubeDepth:=Depth;
  cube.OnProgress := Form1.Progress; //onProgress funktion festlegen
  dyn:=TGLODEDynamic.Create(cube.Behaviours); //an dynamic element übergeben
  dyn.Manager:=GLODEManager1; //ODEManager eintragen
  with TODEElementBox(dyn.AddNewElement(TODEElementBox)) do begin //cube werte übernehmen
    BoxWidth:=cube.CubeWidth;
    BoxHeight:=cube.CubeHeight;
    BoxDepth:=cube.CubeDepth;
  end;
end;


So hab ich das gemacht, den rest macht das GLScene!

MfG Bergmann


BenBE - So 24.02.08 16:06

hmmm, untersuch mal bitte kurz, wie die Berechnung der Dynamik-Geschichte implementiert ist ...


Bergmann89 - So 24.02.08 16:30

In meiner Unit, oder in der von GLScene (das könnte länger dauern)!
Bei mir is das n einfaches Object, was ich in die Form rein klick!


BenBE - So 24.02.08 16:39

Beides. Weil wichtig ist im Endeffekt die verhaltensweise, wo die Code-Abhängigkeiten wie liegen ...


Bergmann89 - So 24.02.08 16:44

OMG, da blick ich nich so richtig durch ^^
das sind n haufen classen, mit den ich nix anzufangen weiß
ich muss mir da ma mehr zeit nehmen!