2012-02-05 7 views
0

내 응용 프로그램에서 파일 공유 및 웹 브라우저에서 파일을 업로드하기 위해 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]; 
    } 

이 소스 코드가 난입니다 사용 : http://code.google.com/p/cocoaasyncsocket/

답변

0

그냥 백 그라운드를 생성하면됩니다. d thread를 다음과 같은 코드로 수정하십시오.

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

'threadMain'메소드에서 서버 리스너를 시작하십시오.

멀티 스레딩에 대한 자세한 내용은 Threading Programming Guide

관련 문제