2008-10-21 4 views
4

je remarquai que l'appel banal de mon thread principalAppel performSelectorOnMainThread => Application multithread?

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

était à l'origine [NSThread isMultiThreaded] signaler que mon application
était devenu multithread. Je pensais que c'était supposé
se produire lorsque vous détachez un thread, quelque chose qui met en file d'attente
un message dans un thread ne devrait pas avoir à faire.

Des idées?

Cette question n'est pas la même que this one.

la presse Arrêtez
Ma faute, rollBar: appelé [m_progress_bar incrementBy: 0.5];.
La jolie, lécher, animation NSProgressIndicator est responsable
pour rendre mon application devenir multithread. Ce qui est surprenant.
Je ne le savais pas.

Étonnamment, [m_progress_bar usesThreadedAnimation] toujours
retours NO, même si la barre anime quand mon application est suspendue.

+0

Mais si vous essayez d'exécuter quelque chose (dans le thread principal) et ne voulez pas attendre que cette opération soit terminée ("waitUntilDone: false") cela ne signifie-t-il pas automatiquement que vous devez avoir au moins deux threads? – diciu

+0

Non, vous ne faites que poster des événements dans la file d'attente de votre propre thread. Au moins c'est ce que vous attendez. Traversez cependant, j'ai compris: j'ai fait quelque chose de stupide, mais le résultat a été surprenant. –

Répondre

6

Êtes-vous sûr de cela? Je mets le code suivant dans ma méthode init de 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"); 

et a obtenu ce résultat dans la console:

 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 

J'ai aussi ajouté la deuxième déclaration NSLog(...) à mon applicationWillTerminate: méthode et il m'a aussi dit que ce n'était pas multithread.

+0

Merci, vous m'avez mis sur la bonne voie. Le NSProgressIndicator dans rollBar: fait que mon application devienne multithread. Qui savait!? –

Questions connexes