У меня проблема с приложением.Мое приложение я попытался прочитать некоторые данные из сокета асинхронно и обрабатывать его синхронно.
Вот ситуация
У меня запущен поток (скажем, Поток A) для приема данных из сокета.Я должен обработать эти данные в другом потоке, потому что я не хочу блокировать этот поток 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
для обработки.Класс DataProcessor сохранит данные в DataStore
для последующей обработки, если класс DataExecutor
занят обработкой других данных.Но моя проблема в том, что я хочу создать один поток в DataExecutor
для обработки.Таким образом, startExecution будет выполняться в одном потоке, а добавление данных будет выполняться во вновь созданном потоке.Кто-нибудь может сказать мне несколько предложений по этому вопросу.Если вам нужно больше объяснений, пожалуйста, дайте мне знать.Заранее спасибо.
С уважением, пользовательX