У меня есть приложение, которое использует 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 закончена, то функция изменения будет вызвана с помощью таймера, интересно знать, почему и как исправить это?
Похоже, что «StartLogging» блокирует текущий поток, поэтому цикл цикла не может продолжаться, и таймер никогда не может срабатывать. Почему вы считаете, что «StartLogging» использует другой поток? – Jonah
Согласен. Кстати, нет смысла в том, чтобы «change» отправлял обновление «test» в основной поток, потому что вы уже на нем, потому что вы запланировали этот таймер в цикле основного запуска. Но Иона прав, что у вас, вероятно, есть что-то еще, блокирующее основной поток, и «MessageProcessor» является вероятным виновником на основе того, что было предоставлено до сих пор. – Rob
[NSThread isMainThread] показывает NO, поэтому я предполагаю, что ведение журнала использует другой поток, а не текущий. – user3435230