Вызов executeSelectorOnMainThread => Многопоточное приложение?

Я заметил, что следующий банальный вызов из моего основного потока

[self performSelectorOnMainThread:@selector(rollBar:)
      withObject:nil
      waitUntilDone:false];

заставлял [NSThread isMultiThreaded] сообщать, что мое приложение
стало многопоточным. Я думал, что это должно
происходить только при отсоединении потока, а не при постановке сообщения в очередь
в одном потоке.

Любые идеи?

Этот вопрос отличается от этого.

Остановите прессу
Моя вина, rollBar: по имени [m_progress_bar incrementBy: 0.5];.
Симпатичный, симпатичный, оживляющий NSProgressIndicator отвечает
за то, что мое приложение стало многопоточным. Что удивительно.
Я этого не знал.

Удивительно, но [m_progress_bar usesThreadedAnimation] всегда
возвращает NO, несмотря на то, что панель анимируется, когда мое приложение зависает.


person Rhythmic Fistman    schedule 21.10.2008    source источник
comment
Но если вы пытаетесь что-то запустить (в основном потоке) и не хотите ждать, пока эта операция будет выполнена (waitUntilDone: false), не означает ли это автоматически, что у вас должно быть как минимум два потока?   -  person diciu    schedule 21.10.2008
comment
Нет, вы просто отправляете события в очередь своего собственного потока. По крайней мере, это то, что вы ожидаете. Впрочем, подождите, я разобрался: я сделал глупость, но результат был неожиданным.   -  person Rhythmic Fistman    schedule 21.10.2008


Ответы (1)


Вы в этом уверены? Я поместил следующий код в метод инициализации моего appDelegate:

NSLog(@"Multi-threaded before? %@", [NSThread isMultiThreaded] ? @"Yes" : @"No");
[self performSelectorOnMainThread: @selector(setDelegate:) withObject: self waitUntilDone: NO];
NSLog(@"Multi-threaded after? %@", [NSThread isMultiThreaded] ? @"Yes" : @"No");

и получил такой результат в консоли:

2008-10-21 07:26:28.296 MyApplication[82963:20b] Multi-threaded before? No
2008-10-21 07:26:28.297 MyApplication[82963:20b] Multi-threaded after? No

Я также добавил второй оператор NSLog(...) в мой метод applicationWillTerminate:, и он также сообщил мне, что он не является многопоточным.

person Ben Gottlieb    schedule 21.10.2008
comment
Спасибо, вы поставили меня на правильный путь. NSProgressIndicator в rollBar: сделал мое приложение многопоточным. Кто знал!? - person Rhythmic Fistman; 21.10.2008