Speicher wird erst geleert nach schließen des Programms
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
RE: Speicher wird erst geleert nach schließen des Programms
So,
ich habe nun mal folgendes gemacht. http://digital.ni.com/public.nsf/allkb/7...9100758BE5
Nur wenn ich meinem CLF-Node einen leeren Pfad übergebe, stehen immernoch wie gewohnt
die Daten des "nicht" angeschlossenen Slaves in meinem Cluster, obwohl ich doch grundsätzlich die .dll
nicht öffne. Oder versteh ich da irgendwas falsch?
RE: Speicher wird erst geleert nach schließen des Programms
Was gibt dir eigentlich der Rückgabewert "CIFX_NO_ERROR" aus, wenn du keinen Teilnehmer im Netzwerk hast? Vielleicht einen Error, der darauf hinweist, dass du GetPacket gar nicht mehr durchführen sollst/darfst?
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Speicher wird erst geleert nach schließen des Programms
Da bekomme ich die Meldung "No Error" zurück. Mir ist noch etwas aufgefallen. Ziehe ich das EtherNet Kabel, warte dann ca. 10 Minuten und führe dann den Suchlauf durch, wird mir die Anzahl der Slaves als null angezeigt.
RE: Speicher wird erst geleert nach schließen des Programms
Hm wohl wahr....aber wenn ich mir das mal überlege, kann es doch an der .dll nicht liegen oder? Weil wie ich schon beschrieben habe, einen leeren Pfad an meine .dll übergebe und dann den Suchlauf starte, sollte mir doch eigenltlich keine Werte mehr ins Cluster geschrieben werden. Das Cluster initialisiere ich anfangs immer auf den default Wert mit nullen.
09.07.2013, 09:10 (Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2013 09:10 von rolfk.)
RE: Speicher wird erst geleert nach schließen des Programms
(08.07.2013 08:56 )raverel schrieb: So,
ich habe nun mal folgendes gemacht. http://digital.ni.com/public.nsf/allkb/7...9100758BE5
Nur wenn ich meinem CLF-Node einen leeren Pfad übergebe, stehen immernoch wie gewohnt
die Daten des "nicht" angeschlossenen Slaves in meinem Cluster, obwohl ich doch grundsätzlich die .dll
nicht öffne. Oder versteh ich da irgendwas falsch?
Solange in Deinem Programm IRGENDEINE CLN ist die Deine DLL noch im Speicher behält, bleibt die ganz einfach im Speicher! Da hilft ein leerer Pfad an einer einzigen CLN gar nichts.
RE: Speicher wird erst geleert nach schließen des Programms
Mit dem Process Explorer kannst du per View->Lower Pane View->DLLs (Ctrl+D) schauen, ob eine DLL geladen ist oder nicht.
D.h. damit kannst du den Geladen/Entladen Zustand mit verfolgen.
10.07.2013, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2013 16:35 von raverel.)
RE: Speicher wird erst geleert nach schließen des Programms
Bedeutet das jetzt, dass ich an allen Stellen wo ich die .dll aufrufe einen leeren Pfad anhängen muss?
Ich habe nämlich im Moment keine Ahnung mehr was ich machen soll.
10.07.2013, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2013 19:34 von rolfk.)
RE: Speicher wird erst geleert nach schließen des Programms
(10.07.2013 16:29 )raverel schrieb: Bedeutet das jetzt, dass ich an allen Stellen wo ich die .dll aufrufe einen leeren Pfad anhängen muss?
Ich habe nämlich im Moment keine Ahnung mehr was ich machen soll.
Wenn Du die DLL effektive aus dem Speicher werfen willst, Ja! Solange eine CLN (oder ein Aufruf vom Windows API LoadLibrary()) eine DLL im Speicher hält bleibt die ganz einfach dort. Da kannst Du einer einzelnen CLN 100 mal einen leeren Pfad geben, das ändert nichts. Und nein versuche nicht durch mehrmaligen Aufruf von FreeLibrary() die DLL doch noch aus dem Speicher zu werfen. Die CLN die eine DLL geladen hat geht davon aus dass das so bleibt bis Du einen leeren Pfad an die CLN gibst. Wenn Du die DLL dann hinter dem Rücken der CLN aus dem Specicher wirfst wird es garantiert knallen beim nächsten Aufruf einer solchen CLN da sie einfach davon ausgeht dass die DLL noch genau so im Speicher ist als zuvor, und bei inzwischen ausgeladener DLL ganz einfach ins Leere läuft.