2012-02-05 3 views
0

私のアプリでは、ファイルを共有してWebブラウザからアプリケーションにファイルをアップロードするためにWiFi上のサーバーを開きます。 私は主なスレッド(UIスレッド)上で動作し、多くの問題を抱えているという問題があります。代わりにこのコードをバックグラウンドで動作させる方法がありますか?バックグラウンドスレッドでCFReadStreamClientCallBack

これはコードです:

私が読んストリームこの方法では、非ブロックします:

if (!CFReadStreamSetClient (theReadStream, 
    kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered | kCFStreamEventOpenCompleted, 
    (CFReadStreamClientCallBack)&MyCFReadStreamCallback, 
    (CFStreamClientContext *)(&theContext))) 
{ 
    NSError *err = [self getStreamError]; 

    NSLog (@"AsyncSocket %p couldn't attach read stream to run-loop,", self); 
    NSLog (@"Error: %@", err); 

    if (errPtr) *errPtr = err; 
    return NO; 
} 

をし、それがこのメソッドを呼び出します。

static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo) 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

     AsyncSocket *socket = [[(AsyncSocket *)pInfo retain] autorelease]; 
     [socket doCFReadStreamCallback:type forStream:stream]; 

     [pool release]; 
    } 

これはソースコードのiは、使用: http://code.google.com/p/cocoaasyncsocket/

答えて

0

バックグラウンドdスレッドを次のようなコードで置き換えてください:

bgThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain) object:nil]; 
[bgThread start]; 

そして、 'threadMain'メソッドでサーバーリスナーを起動してください。

マルチスレッドに関する詳細Threading Programming Guide

関連する問題