2011-03-08 43 views
0

Ik有一個問題,我找不到答案,因爲我想知道我的當前代碼是否正確。代碼如下。關於塊和大中央調度問題

問題是關於while循環..這是正確的嗎? PS:Platinum uPnp在Start()之後需要while循環,否則該過程將明顯停止。

- (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

請注意,在LLVM 2.0之外混合C++和Blocks是相當脆弱的(即在某些情況下是完全破壞的)。 – bbum 2011-03-08 21:00:01

回答

1

這看起來不對。如果你需要while循環,這意味着Start()是非阻塞的,在這種情況下它不需要在後臺線程中。你應該在主線程上運行一個runloop並從那裏開始,看起來像。

+0

事情是它可能是非阻塞的,這表明它是,但如果我不做一個while循環後開始()在套接字偵聽器中的構建停止監聽。 – 2011-03-08 19:01:20

+0

我修好了。這是愚蠢的,不要笑。我用start()初始化了監聽狀態,然後離開了函數,這樣它就會忘記實例。 – 2011-03-08 19:42:36