Donner la main au système dans une boucle

bdonebdone Membre
05:40 modifié dans API AppKit #1
Bonjour à  tous,

Je débute en Cocoa ! J'ai une boucle qui s'exécute pendant plusieurs minutes (procédure d'import). Je voudrais utiliser une fonction qui rende la main au système à  chaque passage dans la boucle pour ne pas que mon appli soit considérée comme ne répondant pas par le système. Avec RealBasic j'utilisais App.DoEvents ou ProcessNextEvent avec PowerPlant.

Merci beaucoup pour votre aide.

Bernard Done

Réponses

  • mpergandmpergand Membre
    janvier 2009 modifié #2
    j'utilise ça:
    +(void) wait:(NSTimeInterval) time <br />{<br />	NSTimeInterval time1=[NSDate timeIntervalSinceReferenceDate];<br />	NSTimeInterval time2;<br /><br />	do	{<br />	<br />		[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time2=[NSDate timeIntervalSinceReferenceDate];<br />			<br />		}while((time2-time1)&lt;time);<br /><br />}<br />
    


    Mais si le traitement ne dure que quelques secondes seulement...

    [EDIT]
    pour eviter la roue de la mort d'apparaà®tre, tu peux utiliser juste cette ligne:
    <br />[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
    


    S'il est possible de fragmenter le traitement, on peut faire:
    <br /><br />-(void) import<br />{<br />while(condition)<br />&nbsp; {<br />&nbsp; // traitement<br />&nbsp; [self performSelector:@selector(import) withObject:nil afterDelay:0];<br />&nbsp; }<br /><br />// terminé <br /><br />}<br />
    



    Sinon, un bon vieux thread.
  • schlumschlum Membre
    05:40 modifié #3
    Il faut utiliser les threads... Cf. NSThread
    Il y a déjà  pas mal de sujets dessus !
  • bdonebdone Membre
    05:40 modifié #4
    Alors je vais tenter un thread  ;)

    Merci pour votre aide

    Bernard Done
Connectez-vous ou Inscrivez-vous pour répondre.