Anscheinend hast du ein t vergessen (uint32_t)Original von MetalSnake
-(uin32_t)calcCRC32FromFile:(NSString*)inFilename;
There are 10 kinds of people in the world - those who understand binary
and those who don't.
									and those who don't.
Anscheinend hast du ein t vergessen (uint32_t)Original von MetalSnake
-(uin32_t)calcCRC32FromFile:(NSString*)inFilename;
Original von Squart
Anscheinend hast du ein t vergessen (uint32_t)Original von MetalSnake
-(uin32_t)calcCRC32FromFile:(NSString*)inFilename;
 - sorry
 - sorry  
  
									Original von MetalSnake
ah, hatte nur copy und paste benutzt.

klappt jetzt scheinbar, aber welches Polynom muss ich denn da jetzt übergeben um die gleichen Werte wie cksum -o 3 zu bekommen?

 
									Original von MetalSnake
Aber ich wie gerade sehe scheint es doch zu gehen wenn ich vorher (unsigned *) schreibe, habs aber noch nicht ausprobiert.
Original von MetalSnake
Wollte grad mal beide Methoden jeweils 2500 mal in einer Schleife durchlaufen lassen. nach 2 Minuten ging hier gar nichts mehr, 10 Minuten später kam dann endlich die Erlösung mit diesem Fehler:
Sind dass die Auswirkungen eines Speicherlecks?
Der war übrigens mit der ersten Schleife (die benutzt die zlib) noch nicht fertig.
Jedenfalls mal ganz lustig seinen Rechner mit seinem eigenen Code in die Knie zu zwingen.

Original von asrael
[Hmm, da waere ich vorsichtig. Was erwartet den die Funktion, einen Zeiger oder einen Wert?
(unsigned int) und einen Zeiger dauf man normal nicht ohne weiteres austauschen.
Original von asrael
Ja, irgendwo hast Du da ein Speicherleck. free()s und -releases: nicht vergessen.
Manfred
 
									Original von MetalSnake
Ich sag ja, die Berechnung ist mir zu hoch.
Verstehe dann nicht so wirklich wofür man ein Polynom übergeben kann wenn sowieso immer der selbe benutze wird?
Naja jedenfalls hatte ich vorhin unterschiedliche Werte, aber das lag daran dass ich bei der Ausgabe %qi benutzt habe statt %u, erstes habe ich in der Methode mit dem cksum Aufruf benutzt da ich irgendwie auf einen gemeinsamen nenner kommen musste mit dem NSScanner bei dem ich keine Methode gefunden habe um in ein unsignedInt zu scannen, aber in longlong geht also habe ich den benutzt. Aber ich wie gerade sehe scheint es doch zu gehen wenn ich vorher (unsigned *) schreibe, habs aber noch nicht ausprobiert.
Ist mir im Moment auch nicht mehr so wichtig. Die Methode mit der zlib scheint jetzt nach einem ersten Test 200ms schneller zu sein.
Wollte grad mal beide Methoden jeweils 2500 mal in einer Schleife durchlaufen lassen. nach 2 Minuten ging hier gar nichts mehr, 10 Minuten später kam dann endlich die Erlösung mit diesem Fehler:
Sind dass die Auswirkungen eines Speicherlecks?
Der war übrigens mit der ersten Schleife (die benutzt die zlib) noch nicht fertig.
Jedenfalls mal ganz lustig seinen Rechner mit seinem eigenen Code in die Knie zu zwingen.


 (Ich bezeichne den AP des Mainthreads auch gerne als den Garbage-Collector von Cocoa
 (Ich bezeichne den AP des Mainthreads auch gerne als den Garbage-Collector von Cocoa 


Freilich ist sie schneller, denn der Weg mit dem Kommandozeilenskripten ist ja viel Aufwendiger. Es muss erst ein Thread erzeugt werden, dann werden die Ausgaben durch eine Pipe gejagt, etc. ...
Mich verblüfft, dass ein einziger Aufruf schon 200 ms bringt! - Das ist ja für eine schnelle CPU eine halbe Ewigkeit.

Die Änderung mit dem 'alloc & initWithContentsOfFile' oben bewirkt nun, dass das Objekt nicht im AP angelegt wird, sondern der Aufrufer selbst dafür verantwortlich ist, es freizugeben.
Und das geschieht mit dem release am Ende der Funktion - also sollte sofot immer dann geschehen, wenn Du das Objekt nicht mehr benötigst!
Somit erfolgt die Freigabe der Resourcen immer zum exakt kontrollierten Zeitpunkt.
Nun ganz so stimmt das nicht. Es gibt die Garantie, dass er nicht innerhalb der laufenden Klassenmethode zuschlägt, denn sonst wäre das Ganze ja auf Sand gebaut(Ich bezeichne den AP des Mainthreads auch gerne als den Garbage-Collector von Cocoa
Original von Tom9811
...
Die Garantie lautet, dass nicht vor Ende der Run - Loop der ARP geleert wäre. Sonst wären nämlich z.B. convenience Allocators auf Sand gebaut. Daher ist der Zeitpunkt der Aufgabe exakt defniert und kann zudem von dir durch ein eigenes ARP-Objekt bestimmt werden. Das ist definitiv etwas komplett anderes als GC.


Original von James
Mich verblüfft, dass ein einziger Aufruf schon 200 ms bringt! - Das ist ja für eine schnelle CPU eine halbe Ewigkeit.
 Ich hab einen g4 733MHz, heutzutage gilt das wohl eher nicht mehr als schnell…
 Ich hab einen g4 733MHz, heutzutage gilt das wohl eher nicht mehr als schnell…
Wenn Du nun diese CRC32 Berechnung sehr oft im Programm durchführst, dann lohnt sich ein Libcall über den crc32 der zlib sehr, sehr schnell.

 
									Original von MetalSnake
Bei dem Versuch das gunzip aus der zlib zu benutzen bin ich gescheitert, die Dokumentation in dem Header ist nicht sehr verständlich wie ich finde, jedenfalls glaube ich jetzt das gzopen() dass macht was ich möchte.
Habe da zum Testen mal dies geschrieben:
Da meckert der Compiler aber: "warning: passing argument 1 of 'gzopen' from incompatible pointer type"
Habe dann mal testweise inFileName in "/blah/blup.gz" geändert, dann ist zwar der Compiler zufrieden, aber in data steht nichts.
gzopen() gibt einen file pointer.
Wieso kann er das Object dann die 249 mal vorher herstellen und dann plötzlich nicht mehr?

Original von MetalSnake
Ich trau mich schon gar nicht mehr weiter zu schreiben aber es gibt noch 2 Probleme:
Wenn in einem Pfad ein ´ vorkommt kann das ganze nicht in ein CString gewandelt werden. Wenn ich das encoding auf NSUnicodeStringEncoding stelle klappt die Umwandlung gar nicht mehr.

Und die 250 hat wieder zugeschlagen, nach dem 250. mal gibt mir [fm copyPath:fromPath toPath:toPath handler:nil] NO zurück.
Die Datei wird noch erstellt aber mit 0byte. Platte ist noch genügend Frei, und es ist auch egal ob die 250 Dateien im Schnitt 4mb oder 15mb sind. Es ist auch nicht abhängig von der Datei sondern immer nur die Anzahl.
Also ich steh grad echt aufm Schlauch glaub ich…
Original von James
Original von MetalSnake
Ich trau mich schon gar nicht mehr weiter zu schreiben aber es gibt noch 2 Probleme:
Wenn in einem Pfad ein ´ vorkommt kann das ganze nicht in ein CString gewandelt werden. Wenn ich das encoding auf NSUnicodeStringEncoding stelle klappt die Umwandlung gar nicht mehr.
Hallo MetalSnake,
Probier mal statt -[NSString cString] ein -[NSString UTF8String];
Hast Du das Programm schon mal unter ObjectAlloc laufen lassen?
Original von MetalSnake
Original von James
Original von MetalSnake
Ich trau mich schon gar nicht mehr weiter zu schreiben aber es gibt noch 2 Probleme:
Wenn in einem Pfad ein ´ vorkommt kann das ganze nicht in ein CString gewandelt werden. Wenn ich das encoding auf NSUnicodeStringEncoding stelle klappt die Umwandlung gar nicht mehr.
Hallo MetalSnake,
Probier mal statt -[NSString cString] ein -[NSString UTF8String];
Du meinst statt [inFileName getCString:cstr … [inFileName getUTF8String:cstr …? Das scheint es jedenfalls nicht zu geben.

Hast Du das Programm schon mal unter ObjectAlloc laufen lassen?
Gibts dazu eine Anleitung? Habe bei Apple jetzt nur dies gefunden developer.apple.com/documentat…/20001882-97995-TPXREF162 da steht aber nicht wirklich beschrieben wofür alles steht.
Ich hab da jedenfalls sehr viele rote, gelbe und blaue Balken und ziemlich viele sind sehr lang. *g*
