2011-01-23 65 views
0

我的應用程序有第二個運行線程。我需要實現以下目標:iphone sdk線程間通信

  • 從主應用程序線程
  • 調用從第二個線程的信號結果在主線程功能正常停止單獨的線程已經發現並把它傳遞給主一。

我發現了以下第一個任務:在2個線程之間共享一個全局變量? 不知道如何實現第二項任務。 (NSNotificationCenter不允許傳遞對象...)

我吃午飯的第二個線程這樣[NSThread detachNewThreadSelector:@selector(backGroudTask) toTarget:self withObject:nil];

感謝

回答

1

我仍然在尋找這個的最佳答案,但這裏是我所做的:

使用NSLock來創建一個鎖,防止我在兩個線程上訪問相同的變量。然後使用BOOL來查看主線程是否想要啓動停止。

在主線程

在其他線程做這個


[myLock lock]; 
exitFlag = YES; 
[myLock unlock]; 

做到這一點

endMe = NO; 

while(!endMe) 
{ 
    // do your task stuff 

    [myLock lock]; 
    endMe = exitFlag; 
    [myLock unlock]; 
}

對於你的問題的第二部分,使用以下命令:

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

這將導致您的選擇器例程在主線程上運行。

希望這會有所幫助

1

(NSNotificationCenter不允許傳遞對象... )

它,但你必須將它們添加到該通知的用戶信息

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"object"]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo]; 

- (void)foo:(NSNotification *)notification { 
    id object = [[notification userInfo] objectForKey:@"object"]; 
}