2012-03-02 2 views
0

私は他のスレッドで処理する必要があるコールバックを定期的に取得しています。これらの処理メソッドを1つのスレッドにキューして、順番に実行したいと思います。私は生のNSThread(仕事が多すぎるため)を使いたくないし、GCDを使いたくない(iOS 3.1をサポートする必要があるため)。 NSOperationを見始めましたが、サブクラス化、必要なデータの受け渡しなどが必要です。次にrunLoopsについて考えるようになりました...とにかく、タスクを達成するための便利な方法は何ですか?他のスレッドでメソッドコールバックをキューに入れる方法は?

+0

スレッドは決して単純ではありません。あなたはいつもそれらを使用するときにいくつかの作業を行う必要があります。 – v1Axvw

答えて

1

NSOperationは、実行ループよりもセットアップがクリーンです。あなたはあなたのコールバックが何であるかは言わない。彼らは機能していますか?セレクタ?ブロック?オブジェクト?

NSOperationサブクラスはmainをオーバーライドするだけで、コールバックを操作に渡すことができます。

@interface MyOperation : NSOperation 
{ 
@private 
    CallbackType callback; // is e.g. a function pointer 
    void* context;   // a parameter for the callback as an example 
} 
-(id) initWithCallback: (CallbackType) newCallback; 
      andContext: (void*) newContext; 
@end 

@implementation MyOperation 

-(id) initWithCallback: (CallbackType) newCallback 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     callback = newCallback; 
     context = newContext; 
    } 
    return self; 
} 

-(void) main 
{ 
    callback(context); 
} 

@end 
+0

私はソケットストリームで作業していますが、ストリームからデータを読み込むときに - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEventを呼び出しています。そして私は、ストリームを読み込み処理をキューに入れたいと思います。しかし、私はパスを持っている必要があります(現在のtheStreamへのハンドラ、宣言されたinputStreamおよびoutputStreamへのポインタ、バッファ(NSMutableData)を渡すポインタが必要です)。 – Centurion

関連する問題