2014-12-21 88 views
0

我想在單擊按鈕時創建無限循環。當我再次按下按鈕時,循環會中斷。此刻我做了這樣的事情。設置按鈕時的無限循環

- (IBAction)Butt_uruchom:(id)sender { 


    UIBarButtonItem *Button_Uruchom = (UIBarButtonItem *)sender; 
    NSString *title=Button_Uruchom.title; 
    if ([title isEqualToString:@"Start"]) 
    { 


      Button_Uruchom.title = @"Stop"; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     do{ 

      [self WyslijZapytanie:@"010C1\r\n"]; 

      }while([title isEqualToString:@"Stop"]); 
     }); 


    } 
    else 
    { 
     Button_Uruchom.title = @"Start"; 

    } 

該代碼在單擊按鈕時更改按鈕標題。我想在開始時按下開始循環,按下停止按鈕時停止。我試圖插入:

do{}while(title isEqualToString:@"Stop") in new Theard 

在IF中,但它並不奏效。你能幫我做這個嗎? :)

+0

不要創建無限循環。它浪費CPU和電池。重構您的代碼以進行適當的事件處理。 – rmaddy

+1

這裏你不需要循環 – Andy

+0

目標c是事件驅動的。你永遠不要使用這樣的循環。你應該對發生的事情做出迴應。這裏的任何循環都被打破了。 – Fogmeister

回答

0

您不能在同一個線程上循環永遠結束接收按鈕事件。使用第二個線程。點擊按鈕啓動線程。第二次點擊停止線程。但是總的來說,循環永遠浪費CPU核心是不明智的。

+0

你能提供一些示例代碼嗎? –

+0

正如你所說,我已經用新代碼編輯了我的問題。但它仍然不起作用。我想創建循環,因爲我想通過套接字連接持續監視某個參數。 –

0

請看看 Understanding dispatch_async

監控插座想想你的第二個線程使用NSRunloop。 Runloop會將威脅放到睡眠狀態,直到源(例如套接字)將事件放入運行環路