2011-01-23 95 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"]; 
}