私はプロジェクトの一部として書いている小さなエージェント ベースのモデリング フレームワークを持っています。さまざまなエージェントはすべて独自のスレッドで実行され、スーパーバイザー クラスがそれらのライフサイクルを制御します。したがって、スーパーバイザー クラスはこれらのスレッドをキャンセルできます。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
}
}