Ich bin unsicher, ob das, was ich erreichen möchte, möglich ist.Einen NSThread verlassen, um aus einer Endlosschleife auszubrechen, ohne den Punkt zu löschen
Ich habe einen Fehler beim Rendern von PDF-Seiten in Bilder, es scheint, dass unsere Anwendung irgendwann fehlerhafte PDF-Dokumente vorfindet und einige Rendering buchstäblich ewig dauern (nie beenden), wodurch unsere Anwendung vom Benutzer gestoppt wird. (Die PDF-Datei ist wirklich problematisch, selbst die Apple Preview-App reagiert nicht mehr, wenn die problematischen Seiten angezeigt werden.)
Ich habe versucht, das Problem zu beheben, indem ich das PDF-Rendering in einen zweiten Thread einfüge, während der aktuelle Thread auf den Ergebnis und versuchen Sie, den NSThread abzubrechen, wenn das Rendering abgelaufen ist.
MAImageRepDrawing* imageRepDrawing = [[MAImageRepDrawing alloc] initWithImageRep:imgRep ...];
NSThread* thread = [[NSThread alloc] initWithTarget:imageRepDrawing selector:@selector(doDrawImageRep) object:nil];
[thread start];
double timeOutAt = 0;
if (IMAGE_REP_RENDERING_TIMEOUT > 0)
timeOutAt = CFAbsoluteTimeGetCurrent() + (IMAGE_REP_RENDERING_TIMEOUT/1000.0);
while (![imageRepDrawing isEnded]) {
sleep(1);
if ((IMAGE_REP_RENDERING_TIMEOUT > 0) && (CFAbsoluteTimeGetCurrent() > timeOutAt)) {
[thread cancel];
break;
}
}
[thread release];
...
Leider hat es nicht ganz das Problem zu beheben, so scheint es, dass der Timeout-Mechanismus funktioniert gut und die Funktion zurück, und damit die Anwendung fortzusetzen. Aber der NSThread bricht nicht ab und die Anwendung hat einen unbrauchbaren Thread mit ungefähr 100% der CPU (ein Kern) erhalten. Beim nächsten Auftreten eines Timeouts können zwei Threads verwendet werden, die ungefähr 200% der CPU (zwei Kerne) verwenden. Etc. Also meine Schlussfolgerung ist, dass der Zeichenprozess nicht nach einer Stornierung sucht.
Ich suchte eine Art von Fix, auch wenn es hässlich sein kann, wie Aufruf [NSThread exit]
, aber ich kann nicht diese statische Funktion aus dem aktuellen Thread aufrufen ... Ich sehe keine andere nützliche Funktion: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/
Gibt es noch etwas anderes?
Danke!
Eigentlich, wenn Sie eine PDF-Beispiel haben, die Handed Handed ist, würde ich gerne einen Fehler mit dieser PDF-Datei einreichen. Sie können es mir mailen; bbum @ apple ... – bbum
Ich habe dir gerade eine Nachricht geschickt. Danke vielmals! : D –