2012-01-19 3 views
0

完了までに少し時間がかかる計算タスクがあります。分。たぶん数分。 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をキューに追加することを怠っていました。

+0

あなたの修正を受け入れられた回答として追加して、将来の視聴者が簡単に見られるようにします。 – jrtc27

答えて

0

アップデート:修正済み:私はSNOperationQueueを作成し、NSOperationをキューに追加することを怠っていました。

関連する問題