2011-03-08 1 views
0

J'ai une question que je ne peux pas trouver une réponse à parce que je veux savoir si mon code actuel est correct ou non. Le code est ci-dessous.Question sur les blocs et grand central d'expédition

La question concerne la boucle while .. est-ce correct? PS: Platinum uPnp a besoin d'une boucle while après Start() ou le processus s'arrêtera apparemment.

- (void) start { 

scan_queue = dispatch_queue_create("upnpscan.devices", NULL); 

    dispatch_async(scan_queue, ^{ 

     PLT_CtrlPointReference ctrlPoint(new PLT_CtrlPoint());   
     BritneyMediaController controller(ctrlPoint, self); 

     upnp.AddCtrlPoint(ctrlPoint); 
     upnp.Start(); 

     [self setRunning:YES]; 
     while([self running]) { 

     } 
     NSLog(@"Stopped running"); 
    }); 
    NSLog(@"Voor sleep"); 
    sleep(10); 
    NSLog(@"Ik ben wakker"); 
    [self stop]; 
} 

- (void) stop { 

    [self setRunning:NO]; 
    return; 

} 
+0

Notez que le mélange C++ et Blocs est plutôt fragile (c'est-à-dire complètement cassé, dans certains cas) en dehors de LLVM 2.0. – bbum

Répondre

1

Cela ne semble pas correct. Si vous avez besoin de la boucle while, cela implique que Start() est non bloquant, auquel cas il n'a pas besoin d'être dans un thread d'arrière-plan. Vous devriez lancer un runloop sur le thread principal et commencer à partir de là, il ressemble à.

+0

La chose est qu'il pourrait être non bloquant et cela indique qu'il est mais si je ne fais pas une boucle while après le début() l'écouteur build in socket arrête d'écouter. –

+0

je l'ai réparé. C'était stupide de ne pas rire. J'ai initialisé l'état d'écoute avec start(), puis j'ai quitté la fonction afin d'oublier l'instance. –

Questions connexes