IOS:汎用スレッドを停止する

私のアプリでは、このコードを使ってNSThreadを起動します

[NSThread detachNewThreadSelector:@selector(threadStart) toTarget:self withObject:nil];


- (void)threadStart 
{  
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

//something to do...

[pool release];
}

私の問題は、私は開始し、このスレッドを時々停止する必要があり、その後、汎用スレッドを持つために.hでスレッドを宣言しなければならないということです。それは可能ですか?

0

2 答え

スレッドの実行を停止する正しい方法は、実行を停止するようにうまくやってみることです。あなたのスレッドでは、そのような要求を聞き、適切なタイミングで従います。

Appleのスレッドプログラミングガイドによると:

Cocoa、POSIX、およびMultiprocessing Servicesはスレッドを直接殺すためのルーチンを提供していますが、このようなルーチンの使用はお勧めしません。スレッドを強制終了すると、そのスレッドはそれ以降にクリーンアップされません。スレッドによって割り当てられたメモリがリークする可能性があり、スレッドが現在使用している他のリソースが適切にクリーンアップされない可能性があり、後で問題が発生する可能性があります。

     

操作の途中でスレッドを終了する必要がある場合は、キャンセルまたは終了メッセージに応答するようにスレッドを最初から設計する必要があります。長時間実行する操作では、定期的に作業を停止し、そのようなメッセージが到着したかどうかを確認することを意味します。スレッドが終了するように求めるメッセージが表示された場合、スレッドは必要なクリーンアップを実行して正常に終了する機会を得ます。それ以外の場合は、次のデータのまとまりを処理して処理するだけです。

スレッド内で [NSThread exit]; を使用するか、現在のスレッドをキャンセルするか、

または [NSThread cancel] メソッドを使用してください。

0
追加された

あなたが求めていることははっきりしていません。スレッドを別のスレッドから停止することはできません(安全に)。バックグラウンドスレッドで作業を行い、他のスレッドの寿命を管理するには、いくつかのアプローチがあります。

達成しようとしていることを説明する必要があります。なぜバックグラウンドスレッドを停止したいのですか?時には何の作業もありませんか?

0
追加された