完了までに少し時間がかかる計算タスクがあります。分。たぶん数分。 UI上のボタンを使ってタスクを起動してから、UIに戻り、タスクの実行中にユーザーが他の領域とやりとりできるようにします。OS X Cocoa並行性:タスクの起動後にUIに制御を戻す方法
私はAppleの並行処理プログラミングガイドからの例の後に自分のコードをモデル化:
// code here to initialize the c++ objects a, b, c, and d as ivars.
- (NSOperation*)taskWithData:(id)data
{
NSInvocationOperation* theOp = [[[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(myTaskMethod:)
object:nil] autorelease];
return theOp;
}
// This is the method that does the actual work of the task.
- (void)myTaskMethod:(id)data
{
// Perform the task.
task(a, b, c, d);
}
は、その後、私は、ボタンのIBAction内からmyTaskMethod:data
を呼び出す:
-(void)actionButtonPushed:(id)sender
{
NSAutoreleasePool* myPool = [NSAutoreleasePool alloc] init];
[self myTaskMethod:nil];
[myPool drain];
}
私はコントロールがUIに戻ってくることを期待しかし、それはしません。 myTaskMethod:
がビジネスを終了するまでUIに戻りません...私がtask()
をIBActionコードで直接呼び出したのとまったく同じ動作です。
詳細:このコードはObjective-C++(.mm)およびtask()です。 C++関数です。
これは明らかでない場合は、これが同時実行性を使用する最初の試みです。私はある方向性が必要です。
tia、g
アップデート:私はSNOperationQueueを作成し、NSOperationをキューに追加することを怠っていました。
あなたの修正を受け入れられた回答として追加して、将来の視聴者が簡単に見られるようにします。 – jrtc27