2007年5月23日水曜日

blockingしちゃう関数の扱い方

delegateが用意されているものならそれを使えばいいけど、そうじゃないときは、threadで該当関数を走らせて、その終了を拾うまでsleepさせる方法をとる。


endRunLoop = NO;



[NSThread detachNewThreadSelector: @selector(aThreadRoutine:) toTarget:[MyClass class] withObject:nil];

double resolution = 1.0;
BOOL isRunning;
endRunLoop = NO;

do {
NSDate* next = [NSDate dateWithTimeIntervalSinceNow:resolution];
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:next];
} while (isRunning && !endRunLoop);



+ (void) aThreadRoutine:(id)anObject
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// blocking operation here

endRunLoop = YES;

[pool release];
[NSThread exit];
}


別に正しい方法があったらごめん。

0 件のコメント: