2009-10-22 3 views
0

"디스크"에 큰 데이터를 쓰는 결합 가능한 스레드를 만들면 어떤 일이 일어날 지 궁금합니다. 이제는 POSIX 스레드를 사용하여 문서를 작성할 수 있다고합니다. 좋은! 그러나 : 애플의 또 다른 사람은 사용자가 홈 버튼을 누를 때 앱이 종료되는 데 5 초 정도 걸릴 것이라고 말했다. 그래서 내 이해를 위해 "실제"비 연결 스레드는 데이터 손상을 방지하는 감각을 가지고 있지만 iPhone OS가 5 초 후에 프로세스를 죽이면 어쨌든별로 의미가 없을 것입니다.iPhone OS에서 실제 nondetached (joinable) 스레드를 만들 수 있습니까?

하지만 : 연결되지 않은 스레드가 없으면 응용 프로그램이 5 초 후에 종료되는 대신 즉시 종료하겠습니까? 아니면 그냥 나쁜 신화, 그리고 POSIX 조인 가능한 스레드는 응용 프로그램이 종료되기 전에 데이터가 완전히 처리되는지 확인합니까?

걱정하지 마세요. 사용자가 앱을 종료 할 수 없게 만드는 것을 계획하지 않습니다. 나는이 권리를 얻고 싶다.

답변

0

결합 가능한 스레드를 사용하면 스레드가 완료되고 결합 할 때까지 응용 프로그램 종료를 연기 할 수 있는지 확실하지 않습니다. 아마도 그렇지 않습니다. NSThread 또는 NSOperation/NSOperationQueue 대신 POSIX 스레드를 사용할 수 있지만 사용자가 응용 프로그램을 종료 할 가능성은 여전히 ​​고려해야합니다.

1) 응용 프로그램을 사용하면 applicationWillTerminate를 가로 챌 수 SIGTERM 신호 수신 : : 이제

, 종료는 두 가지 방법 중 하나를 발생할 수 있습니다 방법, 다음 SIGTERM 신호 처리기이다;

2) 앱이 SIGKILL을 수신합니다.이 경우 신호 처리기를 통해 신호를 포착 할 수 없으며 신호 처리를 설정하는 것을 무시할 수 없습니다 (물론).

응용 프로그램을 종료하기 위해 SIGTERM 만 보내는 신호 인 경우 스레드에서 작업을 계속 진행하여 데이터를 저장하고 정상적으로 종료 할 수 있어야합니다. 그러나 시간 초과 (언급 한 5 초)가 지난 후에도 앱이 SIGKILL을 수신하고이 이벤트로 인해 즉시 종료 될 수 있습니다. 이것은 사용자가 홈 버튼을 누를 때 실제로 일어날 수 있습니다. iPhone OS가 SIGTERM을 앱에 전송하고 타이머를 실행하며 시간 초과가 발생하면 SIGKILL이 전송됩니다. 그러나 문서의 어떤 것도이를 확인하지 못합니다.

관리하려면 응용 프로그램 상태를 원자 적으로 그리고 가능한 빨리 저장하는 것이 가장 좋습니다 (물론 응용 프로그램에 따라 다름). POSIX 스레드를 취소 할 준비가되어 있어야합니다 (가능한 취소 중 하나에 도달하면 포인트)를 종료하고 필요에 따라 롤백하여 종료 전에 정리합니다.

+0

여기서 SIGTERM 신호는 어디에서 왔으며 SIGTERM은 무엇을 의미합니까? –

+0

SIGTERM은 표준 POSIX 신호 중 하나입니다. 사용자가 홈 버튼을 눌러 애플리케이션에 신호를 보내는 것은 iPhone OS입니다. 이름에서 알 수 있듯이 SIGTERM은 종료 신호를 의미합니다. 유닉스 애플리케이션을 종결시키는 표준 방법이며, 아이폰 OS는 유닉스 애플리케이션이다. –

+0

Ok, 더 정확하게 말하자면 유닉스 데몬 응용 프로그램을 종료하는 표준 방법입니다. –

관련 문제