2015-05-27 5 views
0

У меня есть приложение, которое использует NSTimer для обновления пользовательского интерфейса, тем временем приложение имеет много сообщений о регистрации, которые используют другой поток, проблема у меня есть, когда приложение регистрируется, таймер не был запущен, пока не будут выполнены все протоколирующие сообщения. Код:NSTimer застрял

NSTimer* timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(change:) userInfo:imageView repeats:YES]; 

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

[MessageProcessor StartLogging]; 

функция изменения:

- (void)change:(id)sender 
{ 
    p += 0.1; 
    UIImageView* view = (UIImageView*)[sender userInfo]; 
if (p>2) { 
    p = 0; 
} 

// here rotate the image 

} 

После StartLogging закончена, то функция изменения будет вызвана с помощью таймера, интересно знать, почему и как исправить это?

+0

Похоже, что «StartLogging» блокирует текущий поток, поэтому цикл цикла не может продолжаться, и таймер никогда не может срабатывать. Почему вы считаете, что «StartLogging» использует другой поток? – Jonah

+0

Согласен. Кстати, нет смысла в том, чтобы «change» отправлял обновление «test» в основной поток, потому что вы уже на нем, потому что вы запланировали этот таймер в цикле основного запуска. Но Иона прав, что у вас, вероятно, есть что-то еще, блокирующее основной поток, и «MessageProcessor» является вероятным виновником на основе того, что было предоставлено до сих пор. – Rob

+0

[NSThread isMainThread] показывает NO, поэтому я предполагаю, что ведение журнала использует другой поток, а не текущий. – user3435230

ответ

0

Я думаю, что я нашел случай, да, вы, ребята, правы, внутри метода StartLogging, я назвал основной поток для обработки некоторых данных и пусть он ждет единицы обработки данных. Спасибо, ребята.