iPhone应用程序中的多线程问题?

时间:2012-03-07 08:06:10

标签: iphone objective-c ios

我的申请中遇到了问题。我的应用程序我试图异步读取套接字中的一些数据并同步处理它。

情况如下

我有一个运行线程(比如线程A)来接受来自socket的数据。我必须在另一个线程中处理这些数据,因为我不想阻止这个线程A.

@implementation SocketListener

//Running on Thread A
//Socket data receiving delegate
- (BOOL)onMessage:(NSString *)aMessage response:(NSMutableString *)aResponse {

    //Newly created thread
    [NSThread detachNewThreadSelector:@selector(addMessage:)    
                         toTarget:[DataProcessor sharedInstance] 
                       withObject:aMessage];

}

@end


@implementation DataProcessor
//Newly created thread say Thread X
- (void) addMessage:(NSString *)aMessage {

//Add message to queue
[[DataStore sharedInstance] pushData:aMessage];

//Want to call in another single thread (Don't wanna run on Thread X)
//Start DataExecutor
[[DataExecutor sharedInstance] startExecution];

}

@end

@implementation DataExecutor


//startExecution
- (void) startExecution {

id data = [[DataStore sharedInstance] popData];
//processing data 
//save it to database and send it to server via HTTP
}

@end


@implementation DataStore


//pushData
- (void) pushData:(id)data {

//synchronized
//pushing data to store 

}


//popData
- (id) popData {

//synchronized
//poping data and return

}

@end

SocketListener课程中,我会获取数据asynchronously,然后将其传递给DataProcessor进行处理。如果DataStore类忙于处理其他数据,DataProcessor类将把数据保存到DataExecutor以便稍后处理它。但我的问题是我想在DataExecutor中创建一个单独的线程进行处理。因此startExecution将在单个线程中执行,添加数据将在新创建的线程上运行。谁能告诉我一些关于此的建议。如果您需要更多解释,请告诉我。提前谢谢。

此致 用户X

2 个答案:

答案 0 :(得分:1)

NSOperationQueue就是为此而设计的。使用它。

答案 1 :(得分:0)

如果要实现的效果是执行程序正在按顺序处理数据,则可以在DataExecutor类中启动一个计时器,该计时器定期检查队列中要处理的数据,并始终从SocketListener类向队列中添加数据。