Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有可能在iPhone操作系统中创建一个真正的非详细(可连接)线程吗?_Iphone_Multithreading_Posix - Fatal编程技术网

有可能在iPhone操作系统中创建一个真正的非详细(可连接)线程吗?

有可能在iPhone操作系统中创建一个真正的非详细(可连接)线程吗?,iphone,multithreading,posix,Iphone,Multithreading,Posix,我想知道当我创建一个可连接的线程来将一些大数据写入磁盘时会发生什么。现在,文档说我可以通过使用POSIX线程来实现。美好的但是:苹果的另一个家伙说,当用户按下home(主页)按钮时,一个应用程序有大约5秒钟的时间退出。因此,就我的理解而言,一个真正的非详细线程具有防止数据损坏的意义,但当iPhone操作系统在5秒后终止进程时,我想这没有多大意义 但是:如果没有非详细线程,应用程序会立即退出,而不是在5秒钟后被杀死吗?或者这只是一个错误的神话,POSIX可连接线程将确保在应用程序退出之前完全处理数

我想知道当我创建一个可连接的线程来将一些大数据写入磁盘时会发生什么。现在,文档说我可以通过使用POSIX线程来实现。美好的但是:苹果的另一个家伙说,当用户按下home(主页)按钮时,一个应用程序有大约5秒钟的时间退出。因此,就我的理解而言,一个真正的非详细线程具有防止数据损坏的意义,但当iPhone操作系统在5秒后终止进程时,我想这没有多大意义

但是:如果没有非详细线程,应用程序会立即退出,而不是在5秒钟后被杀死吗?或者这只是一个错误的神话,POSIX可连接线程将确保在应用程序退出之前完全处理数据


别担心,我不打算做一些会阻止用户无法关闭应用程序的事情。我只是想弄清楚这一点。

我不确定使用可连接线程是否允许您推迟应用程序终止,直到您的线程完成并加入它。可能不会。您可以使用POSIX线程代替NSThread或NSOperation/NSOperationQueue,但仍需考虑用户终止应用程序的可能性

现在,终止可能以两种可能的方式之一发生:

1应用程序接收一个SIGTERM信号,您可以通过applicationWillTerminate:method截获该信号,然后该方法就是SIGTERM信号处理程序

2应用程序接收SIGKILL:在这种情况下,您无法通过信号处理程序捕获信号,当然,您也不允许在设置信号处理时忽略它

如果SIGTERM是终止应用程序的唯一信号,那么您应该能够在线程中继续工作以保存数据并正常退出。但是,可能是在您提到的5秒超时后,应用程序也会收到SIGKILL,并且此事件会导致其立即终止。这可能是用户按下home按钮时实际发生的情况:iPhone操作系统向应用程序发送SIGTERM,触发计时器,当超时发生时发送SIGKILL。但据我所知,文件中没有任何内容证实或反驳这一点


为了管理这一点,您当然应该尽最大努力以原子方式尽快保存应用程序状态,并且您应该准备在POSIX线程到达某个可能的取消点时取消它,并根据需要回滚,以便在退出之前进行清理

SIGTERM信号来自何处?SIGTERM是什么意思?SIGTERM是标准POSIX信号之一。是iPhone操作系统向应用程序发送信号,以响应用户按下home按钮。顾名思义,SIGTERM代表终止信号。这是终止unix应用程序的标准方法,而且在后台,iPhone OS也是unix应用程序。好的,更准确地说,这是终止unix守护程序应用程序的标准方法。