Deutsch
Forum

Was mache ich hier mit create("hpic"...) falsch

 
- Seite 1 -



GDL
Hallo,
habe ein Programm, das meinen freien Speicher(240MB) beim Laden kurzfristig auf 2 MB bringt und danach wieder auf 235 MB ansteigen lässt.

Durch Fehlersuche fand ich den Übeltäter
KompilierenMarkierenSeparieren
proc leiste

    windowstyle 3
    arbeitsleiste&=create("window",%hwnd,"Arbeitsleiste",1,%maxy-190,1000,90)
    name$= astart$+"\bilder\bild1.BMP"
    bild_&[9000] = @Create("HPIC", -1, name$)
    ger1&=@Create("PicButton",arbeitsleiste&,bild_&[9000],1,1,30,30,)
    name$= astart$+"\bilder\bild2.BMP"
    bild_&[8999] = @Create("HPIC", -1, name$)
    ger2&=@Create("PicButton",arbeitsleiste&,bild_&[8999],31,1,30,30,)
    name$= astart$+"\bilder\bild3.BMP"
    bild_&[8998] = @Create("HPIC", -1, name$)
    bog1&=@Create("PicButton",arbeitsleiste&,bild_&[8998],61,1,30,30,)
    name$= astart$+"\bilder\bild4.BMP"
    bild_&[8997] = @Create("HPIC", -1, name$)
    bog2&=@Create("PicButton",arbeitsleiste&,bild_&[8997],91,1,30,30,)
    name$= astart$+"\bilder\bild5.BMP"
    bild_&[8996] = @Create("HPIC", -1, name$)
    bog3&=@Create("PicButton",arbeitsleiste&,bild_&[8996],121,1,30,30,)
    name$= astart$+"\bilder\bild6.BMP"
    bild_&[8995] = @Create("HPIC", -1, name$)
    bog4&=@Create("PicButton",arbeitsleiste&,bild_&[8995],151,1,30,30,)
    name$= astart$+"\bilder\bild7.BMP"
    bild_&[8994] = @Create("HPIC", -1, name$)
    wei1&=@Create("PicButton",arbeitsleiste&,bild_&[8994],181,1,30,30,)
    name$= astart$+"\bilder\bild8.BMP"
    bild_&[8993] = @Create("HPIC", -1, name$)
    wei2&=@Create("PicButton",arbeitsleiste&,bild_&[8993],211,1,30,30,)
    name$= astart$+"\bilder\bild9.BMP"
    bild_&[8992] = @Create("HPIC", -1, name$)
    wei3&=@Create("PicButton",arbeitsleiste&,bild_&[8992],241,1,30,30,)
    name$= astart$+"\bilder\bild10.BMP"
    bild_&[8991] = @Create("HPIC", -1, name$)
    wei4&=@Create("PicButton",arbeitsleiste&,bild_&[8991],271,1,30,30,)
    name$= astart$+"\bilder\bild11.BMP"
    bild_&[8990] = @Create("HPIC", -1, name$)
    wei5&=@Create("PicButton",arbeitsleiste&,bild_&[8990],301,1,30,30,)
    name$= astart$+"\bilder\bild12.BMP"
    bild_&[8989] = @Create("HPIC", -1, name$)
    wei6&=@Create("PicButton",arbeitsleiste&,bild_&[8989],331,1,30,30,)
    name$= astart$+"\bilder\bild13.BMP"
    bild_&[8988] = @Create("HPIC", -1, name$)
    wei7&=@Create("PicButton",arbeitsleiste&,bild_&[8988],361,1,30,30,)
    name$= astart$+"\bilder\bild14.BMP"
    bild_&[8987] = @Create("HPIC", -1, name$)
    wei8&=@Create("PicButton",arbeitsleiste&,bild_&[8987],391,1,30,30,)
    name$= astart$+"\bilder\bild19.BMP"
    bild_&[8986] = @Create("HPIC", -1, name$)
    kw1&=@Create("PicButton",arbeitsleiste&,bild_&[8986],421,1,30,30,)
    name$= astart$+"\bilder\bild20.BMP"
    bild_&[8985] = @Create("HPIC", -1, name$)
    kw2&=@Create("PicButton",arbeitsleiste&,bild_&[8985],451,1,30,30,)
    name$= astart$+"\bilder\bild15.BMP"
    bild_&[8984] = @Create("HPIC", -1, name$)
    sig1&=@Create("PicButton",arbeitsleiste&,bild_&[8984],481,1,30,30,)
    name$= astart$+"\bilder\bild16.BMP"
    bild_&[8983] = @Create("HPIC", -1, name$)
    sig2&=@Create("PicButton",arbeitsleiste&,bild_&[8983],511,1,30,30,)
    name$= astart$+"\bilder\bild18.BMP"
    bild_&[8982] = @Create("HPIC", -1, name$)
    ap&=@Create("PicButton",arbeitsleiste&,bild_&[8982],541,1,30,30,)
    name$= astart$+"\bilder\bild17.BMP"
    bild_&[8981] = @Create("HPIC", -1, name$)
    bm&=@Create("PicButton",arbeitsleiste&,bild_&[8981],571,1,30,30,)
    tas&=@Create("Button",arbeitsleiste&,"Ta",601,1,30,30,)
    text&=@Create("Button",arbeitsleiste&,"Text",631,1,50,30,)
    name$= astart$+"\bilder\bild21.BMP"
    bild_&[8980] = @Create("HPIC", -1, name$)
    dwei&[1]=@Create("PicButton",arbeitsleiste&,bild_&[8980],690,1,60,36)
    name$= astart$+"\bilder\bild22.BMP"
    bild_&[8979] = @Create("HPIC", -1, name$)
    dwei&[2]=@Create("PicButton",arbeitsleiste&,bild_&[8979],755,1,60,36)
    name$= astart$+"\bilder\bild23.BMP"
    bild_&[8978] = @Create("HPIC", -1, name$)
    dwei&[3]=@Create("PicButton",arbeitsleiste&,bild_&[8978],820,1,36,60)
    name$= astart$+"\bilder\bild24.BMP"
    bild_&[8977] = @Create("HPIC", -1, name$)
    dwei&[4]=@Create("PicButton",arbeitsleiste&,bild_&[8977],875,1,36,60)
    name$= astart$+"\bilder\bild25.BMP"
    bild_&[8976] = @Create("HPIC", -1, name$)
    winkel&[1]=@Create("PicButton",arbeitsleiste&,bild_&[8976],1,35,30,30)
    name$= astart$+"\bilder\bild26.BMP"
    bild_&[8975] = @Create("HPIC", -1, name$)
    winkel&[2]=@Create("PicButton",arbeitsleiste&,bild_&[8975],31,35,30,30)
    sleep 5000				 sonst bricht der Speicher ein

endproc


Mit sleep 5000 an dieser Stelle bricht der Speicher nicht mehr ein.Je kleiner die Sleepzeit umso weiter bricht der Speicher ein.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
02.12.2006  
 



 
- Seite 1 -



Rolf
Koch
*lol*
Nee egal ob klein oder gross, einfach immer nur die selbe Variable BILD& ohne Arrayzähler.
 
03.12.2006  
 




Rolf
Koch
Aber Stopp:
Wie sieht PICBUTTON aus (wird wohl ne Subproc sein?) - vielleicht passiert da ja was (irgendwas nicht freigegeben oder so)?
 
03.12.2006  
 



 
- Seite 2 -



GDL
Hallo Rolf,
die Bilder sind ein Container und werden später dann zusätzlich auf neu erstellte Controls ebenso automatisch übertragen.
Die Anfangsbutton sind nur Auswahlbutton für neue Eisenbahnkomponenten.

Habe jetzt jede Variation durchprobiert. Habe sleep auch an den Anfang der Procedure gestellt um was zu Testen. Hier ist selbiges.Ich vermute es hängt mit dem declare bild_&[9000] zusammen. Der Rechner braucht halt irgendwo Zeit ,da die Proc leiste gleich nach window... aufgerufen wird.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.12.2006  
 




GDL
Da keine Fehlermeldung kommt und das Proggi einwandfrei läuft iss es ja auch gleich. Mir fiels halt nur auf, da bei meinem PII Rechner, auch ohne sleep, ne 10 sec. Gedenkminute eingelegt wird.
Werds später mal auf Dateien auslagern.

Danke nochmals.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.12.2006  
 



Hallo Georg...

Mit TNT kann man beim Erstellen einer Speicherbitmap sehr gut sehen, das bei grafischen Objekten nicht nur im virtuellen Speicher deines Prozesses gearbeitet wird, sondern in noch viel größerem Maße in dem von CSRSS.EXE

Was geschieht beim Starten eines Prozesses? Der Prozess soll schnell zur Verfügung stehen => die dynamische Priorität ist sehr hoch...

Meine Theorie:
CSRSS läuft mit normaler Priorität. Dein Prozess klaut also beim Starten CSRSS Prozessorzeit => Bereiche, die vorher von CSRSS zugewiesen wurden, können nicht in der erforderlichen Zeit wieder freigegeben werden..
a) Mit Sleep gibts du Prozessorzeit für x-Millisekunden ab, CSRSS kommt dann wieder an die Reihe und kann endlich saubermachen.
b) Dynamische Priorität verringert sich (wenn nichts besonders passiert) mit der Laufzeit des Prozesses. Irgendwann ist die dynamische Priorität so gering, das CSRSS wieder ins Rollen kommt und räumt den vorher genutzten Speicher beiseite.

Das Problem liegt also nicht (direkt) an deinem Programm.

Hat jemand eine bessere Erklärung?

PS: 30*2KB kann man so nicht unbedingt rechnen.
- Jede Seite im Speicher ist etwa 4kB groß.
- Heapkontrollstrukturen müssen da auch noch hinzugerechnet werden
- Handle nimmt Platz weg
- ..
 
03.12.2006  
 




GDL
Hallo Andreas,

deine Theorie deckt sich ja mit meiner Vermutung.
Nur passiert es auch bereits bei einem pic, wenn vorher declare bild&[9000].
Bei declare bild&[10] und 10 pics ist alles in Ordnung.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.12.2006  
 



Was macht den dein Prozess bei declare bild&[9000]? Er initialisiert Speicher, und das nicht gerade wenig. Da ist also jemand stark beschäftig. Passiert das in der Initialisierungsphase, kann CSRSS den für das Anzeigen von grafischen Elementen bereitgestellten Speicher nicht wieder freigeben, da CSRSS zu diesem Zeitpunkt unterhalb der Priorität von deinem Prozess liegt.
Kann das leider nicht überprüfen, da ich dein komplettes Programm nicht habe.
 
03.12.2006  
 




Rolf
Koch
Das meinte ich ja mit bild&. Jedoch verstehe ich Dein Anliegen diese Bilder im Programm bereitzuhalten.
Leider weis ich nicht, wieviel Speicher für je ein Array bereitgestellt wird. Müsste Roland beantworten. Denn 9000 ist wirklich sehr viel.
Ich überlege grad, wie Du die Bilder anstatt per Array irgendwie anders festhalten kannst.
 
03.12.2006  
 




GDL
Bin gerade dabei Modellbahnsteuerung für Rechner mit Win98 und 64MB RAM flotter hinzubekommen. Es sind aber keine Fehlermeldungen in all diesen Fällen.
Wenn du unter Wettbewerbe die letzte Installversion im letzten Posting holst hast du alles komplett.
Nach dem Einlogen(asxdf) unter Auswahlbutton Plan ist das Programm in der Rohform.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.12.2006  
 



Werd mal probieren, ob es bei mir läuft.
Wie gesagt, was ich hier kackfrech einfach mal so behaupte ist, daß nicht dein Prozess den Speicher verpulvert, sondern CSRSS.

Gruß

Andreas
 
03.12.2006  
 




Rolf
Koch
Ich sehe grad, Deine Bilder haben sowieso Bild+Nr.Bmp.
Versuchs doch mal so:
KompilierenMarkierenSeparieren
name$= astart$+"\bilder\bild2.BMP"
bild&=@Create("HPIC", -1, name$)
ger1&=@Create("PicButton",arbeitsleiste&,bild&,1,1,30,30,)
destroywindow bild&
name$= astart$+"\bilder\bild2.BMP"
bild& = @Create("HPIC", -1, name$)
ger2&=@Create("PicButton",arbeitsleiste&,bild&,31,1,30,30,)
destroywindow bild&

Du hast jetzt kein Array, das ist klar. Jedoch kannst Du ja später im Programm doch sehr schön bild& je nach Aktion wieder das richtige Bild zufügen:
Beispiel:
Es wird das 10te Bild wieder benötigt:
(Aktion wäre hier 10 und würde in zahlenausleser$ gespeichert)
KompilierenMarkierenSeparieren
bild$=astart$+"\bilder\bild"+zahlenausleser$+".BMP"
bild& = @Create("HPIC", -1, name$)
neuerbutton&=@Create("PicButton",arbeitsleiste&,bild&,31,1,30,30,)
destroywindow bild&

Aufjedenfall solltest Du von solch grossen Arrays (9000!) Abstand gewinnen.
 
03.12.2006  
 




GDL
Bin gerade dabei mir einen Bildcontainer mit festen Bildern zu machen und ändere die Verschiebetechnik dann ab. Komme dann mit 200 Bildern aus.
KompilierenMarkierenSeparieren
num1&=1
clear result%

whilenot num1& > objekt&        Erzeugte Objekte abfragen

    x%=1
    y%=1
    CheckMouse objekt_&[num1&],x%,y%,lang_&[num1&],breit_&[num1&]

    If result% = 1

        settext kfenster&,oname_$[num1&]
        num&=num1&
        clear result%

        whilenot %Mousepressed = 0

            UseCursor 3
            destroywindow(objekt_&[num1&])
            num&=num1&
            settext kfenster&,oname_$[num1&]
            xpos_&[num1&]=%mousex
            ypos_&[num1&]=%mousey
            xpos_1&[num1&]=%mousex+xbalken%
            ypos_1&[num1&]=%mousey+ybalken%

            ifnot ttext&[num1&]=1

                objekt_&[num1&]=control("STATIC","",style_&[num1&],xpos_&[num1&],ypos_&[num1&],lang_&[num1&],breit_&[num1&],%hwnd,0,%hinstance,$0)
                casenot left$(oname_$[num&],3)="Ger":Sendmessage(objekt_&[num1&],$172,0,bild_&[num1&])        hier werden die Pics momentan gebraucht

            else

                objekt_&[num1&]=create("text",%hwnd,oname_$[num1&],xpos_&[num1&],ypos_&[num1&],lang_&[num1&],breit_&[num1&])
                setfont objekt_&[num1&],font&

            endif

        wend

        UseCursor 0

    Endif

    num1&=num1&+1

wend

if %MouseKey=2

    xn%=%mousex
    yn%=%mousey
    drawtext 10,%maxy-80,("aktuelle Erstellkoordinate: x "+right$(("00"+str$(%mousex)),3)+"  y  "+right$(("00"+str$(%mousey)),3))

endif


Es geht , muss nur die Objekterzeugung noch ändern.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.12.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.886 Betrachtungen

Unbenanntvor 0 min.
rquindt22.11.2015
Uwe Lang27.02.2014
Axel Berse20.02.2013

Themeninformationen

Dieses Thema hat 4 Teilnehmer:

GDL (11x)
Rolf Koch (6x)
unbekannt (3x)
iF (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie