0

私はプロジェクトの一部として書いている小さなエージェント ベースのモデリング フレームワークを持っています。さまざまなエージェントはすべて独自のスレッドで実行され、スーパーバイザー クラスがそれらのライフサイクルを制御します。したがって、スーパーバイザー クラスはこれらのスレッドをキャンセルできます。isCancelledにメソッドがあることは知っていNSThreadます。それを使用すると、次のイディオムが受け入れられます。

#import <Foundation/Foundation.h>
#import "BugThread.h"
#import "Bug.h"

@implementation BugThread

- (id) initWithBug: (Bug*) aBug {

    if((self = [super init])) {
        [bug autorelease];
        bug = [aBug retain];
    }

    return self;
}

- (void) main {

    GSRegisterCurrentThread();

    while(![self isCancelled]) {
        //bug does its stuff
    }
}
4

1 に答える 1

3

これはdocsで明示的に述べられているので、私はそう言うでしょう:

スレッドがキャンセルをサポートしている場合、定期的にこのメソッドを呼び出し、YES が返された場合は終了する必要があります。

NSOperationただし、とをご覧になることをお勧めしますNSOperationQueue。ユーザーに代わって実際のスレッドを管理しながら、まさにこの種の同時実行を許可することを目的としています。同時実行プログラミング ガイドの「オペレーション キュー」を参照してください。

于 2012-08-20T00:46:35.183 に答える