2004年08月07日

performSelectorOnMainThread:...

NSObjectにperformSelectorOnMainThread:withObject:waitUntilDone:なるメソッドが追加されています。 これを用いれぱThreadからAppKitの操作が容易出来て便利です。performSelectorを探してて見つけました。
NSThreadからAppKitを操作する場合はNSPortを利用してDO扱いでメッセージを送信する必要がありますが、このメソッドがそれらの面倒な処理をしてくれる様です。
waitUntilDoneで同期するかどうかも指定出来便利そうです。

AppKitにアクセスする部分をprotocolで定義しておいて、それをdelegateに処理させるのが良さそうです。
@protocol UpdataCounter
- (void)updateCounterField:(NSNumber *)count;
@end

@interface ThreadObject : NSObject
{
    id _delegate;
}
- (void)runThread;
- (void)threadLoop:(id)info;
@end

@implementation ThreadObject
- (void)runThread {
    [NSThread detachNewThreadSelector:@selector(threadLoop:) toTarget:self withObject:nil];
}

- (void)threadLoop:(id)info
{
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
    int count = 0;
    while(1) {
        [_delegate performSelectorOnMainThread:@selector(updateCounterField:) withObject:[NSNumber numverWithInt:count++] waitUntilDone:NO];
        [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
    }
    [pool release];
    [NSThread exit];
}

@end

こんな雰囲気という事で(動作未確認)

gutskun at 16:56│Comments(0)TrackBack(0)Cocoa 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Profile
gutskun
Podcasting
訪問者数
  • 今日:
  • 昨日:
  • 累計: