¿Es posible crear un hilo real no adjunto (que se pueda unir) en el sistema operativo del iPhone?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Me pregunto qué pasaría cuando cree un subproceso que se pueda unir para escribir Big Data en " disco " ;. Ahora, los documentos dicen que puedo hacerlo usando hilos POSIX. ¡Agradable! Pero: otro tipo de Apple dijo que una aplicación tiene aproximadamente 5 segundos para salir cuando el usuario presiona el botón de inicio. Así que para mi comprensión un " real " el hilo no asignado tiene el sentido de evitar la corrupción de datos, pero cuando el sistema operativo del iPhone simplemente detiene el proceso luego de 5 segundos, no tendría mucho sentido, supongo.

Pero: sin subprocesos no asignados, ¿se cerraría la aplicación inmediatamente en lugar de morir después de 5 segundos? ¿O es solo un mal mito, y un hilo de POSIX que se puede unir aseguraría que los datos se procesen completamente antes de que la aplicación se cierre?

No se preocupe, no planeo hacer algo que impida que el usuario no pueda apagar la aplicación. Solo quiero hacer esto bien.

¿Fue útil?

Solución

No estoy seguro de que usar un subproceso que se pueda unir te permita diferir la finalización de la aplicación hasta que el subproceso haya terminado y te unieras a él. Probablemente no. Puede utilizar subprocesos POSIX en lugar de NSThread o NSOperation / NSOperationQueue, pero aún tendrá que tener en cuenta la posibilidad de que el usuario finalice la aplicación.

Ahora, la terminación puede ocurrir de una de dos formas posibles:

1) la aplicación recibe una señal SIGTERM que puede interceptar a través del método applicationWillTerminate:, que es el controlador de señales SIGTERM;

2) la aplicación recibe SIGKILL: en este caso, no puede capturar la señal a través de un manejador de señales y no se le permite (por supuesto) ignorarla configurando la disposición de la señal.

Si SIGTERM es la única señal enviada para finalizar la aplicación, entonces debería poder continuar el trabajo en su hilo para guardar los datos y salir con gracia. Sin embargo, puede ocurrir que después de que transcurra un tiempo de espera (los 5 segundos que mencionó), la aplicación también reciba SIGKILL y este evento provoque su finalización inmediata. Esto puede ser lo que realmente sucede cuando el usuario presiona el botón de inicio: el sistema operativo del iPhone envía SIGTERM a la aplicación, dispara un temporizador y, cuando se agota el tiempo de espera, envía SIGKILL. Pero nada en la documentación lo confirma (o lo refuta, a mi leal saber y entender).

Para gestionar esto, debe hacer su mejor esfuerzo (dependiendo de la aplicación, por supuesto) para guardar el estado de la aplicación de forma atómica y tan pronto como sea posible, y debe estar preparado para cancelar su subproceso POSIX (cuando alcance uno de los posibles puntos de cancelación ) y retroceda según sea necesario para limpiar antes de salir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top