在我的应用程序中,我在WiFi上打开一个服务器,用于共享文件并将文件从Web浏览器上传到应用程序。 我有一个问题,它在主线程(UI线程)上工作,并且它产生了很多问题,有一种方法可以使这个代码在后台工作吗?
这是代码:
我用这种方法使读取流非阻塞:
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 :(得分:1)
使用如下代码生成后台线程:
bgThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain) object:nil];
[bgThread start];
并以'threadMain'方法启动服务器侦听器。
中的多线程