Ist es möglich, einen echten nondetached (zusammenstellbar) Thread in iPhone OS zu schaffen?

StackOverflow https://stackoverflow.com/questions/1608525

  •  05-07-2019
  •  | 
  •  

Frage

Ich frage mich, was passieren würde, wenn ich einen joinable Thread zum Schreiben einig großen Daten auf „Datenträger“ erstellen. Nun, sagen die docs kann ich so von POSIX-Threads verwenden. Nett! Aber: Ein weiterer Mann bei Apple, sagte, dass eine App hat, wie 5 Sekunden oder so zu beenden, wenn der Benutzer die Home-Taste drückt. Also für mein Verständnis eine „echte“ nondetached Thread hat den Sinn Datenbeschädigung zu verhindern, aber wenn das iPhone OS tötet nur den Prozess nach 5 Sekunden sowieso nicht viel Sinn machen würde, denke ich.

Aber: Ohne nondetached Fäden würde die App sofort eher verlassen als nach 5 Sekunden den Tod? Oder ist das nur ein schlechter Mythos und ein POSIX joinable Thread würde sicherstellen, werden die Daten verarbeitet vollständig, bevor die App beendet wird?

Keine Sorge, ich habe nicht vor, etwas zu machen, dass der Benutzer nicht in der Lage zum Absperren der App verhindern wäre. Ich will nur dieses Recht erhalten.

War es hilfreich?

Lösung

Ich bin nicht sicher, ob ein joinable Faden ermöglicht es Ihnen, Programmbeendigung zu verschieben, bis der Thread ausgeführt wird und Sie sich es. Wahrscheinlich nicht. Sie können POSIX-Threads anstelle von NSThread oder NSOperation / NSOperationQueue verwenden, aber Sie werden immer noch die Möglichkeit, dass der Benutzer zur Einstellung der Anwendung berücksichtigen müssen.

Nun, Kündigung in einem von zwei möglichen Arten geschehen kann:

1) Die Anwendung empfängt ein Signal, das SIGTERM Sie durch die applicationWillTerminate abfangen können: Methode, die dann ist das Signal SIGTERM handler;

2) die App erhält SIGKILL: in diesem Fall können Sie das Signal nicht durch einen Signal-Handler fangen und Sie sind nicht (natürlich erlaubt) es die Einstellung des Signals Disposition zu ignorieren

.

Wenn SIGTERM das einzige Signal gesendet, um die Anwendung zu beenden, dann sollten Sie in der Lage sein, die Arbeit in Ihrem Thread fortzusetzen, um die Daten und Ausfahrt anmutig zu speichern. Es kann jedoch sein, dass verstreicht nach einem Timeout (die 5 Sekunden Sie erwähnt), die App erhält auch SIGKILL und dieses Ereignis verursacht seine sofortige Kündigung. Dies kann sein, was passiert eigentlich, wenn der Benutzer die Home-Taste drückt: das iPhone OS sendet SIGTERM an die App, feuert einen Timer und wenn das Timeout auftritt sendet SIGKILL. Aber nichts in der Dokumentation bestätigt dies (oder widerlegt sie, nach bestem Wissen und Gewissen).

Um dies zu verwalten, sollten Sie Ihre bestes (je nach Anwendung natürlich) tun, um den App-Status atomar und so schnell wie möglich zu retten, und Sie sollten Ihren POSIX Thread stornieren hergestellt werden (wenn es eine der möglichen Kündigung Punkte erreicht ) und um zu cleanup nach Bedarf Rollback vor dem Beenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top