2010-02-07 108 views
3

我正在使用线程制作iPhone应用程序。 我曾使用C#一段时间,有一种方法Thread.Join()阻止特定线程的当前线程完成执行。 Cocoa中的等价物是什么?或替代品?Cocoa中的等效C#'Thread.Join()'是什么?

---编辑---

PS。我正在使用NSThread。

---编辑---

我发现喜欢哪些块调用程序线程,直到线程完成执行“waitForThreadExit”的方法。

回答

1

NSThread不以任何名称公开联接方法。 NSThread是一个非常简单,高层次的包装类。这对于在GUI应用程序中执行线程非常有用,因为它简化了回调到主线程。对于任务的简单后台处理以及在完成时将结果反馈给主线程,这应该足够了,并且相当容易。如果你想做更多的“高级”事情(包括加入,这里),那么你要么必须去pthreads或在NSThread(可能通过使用NSCondition)顶层语义。

+0

感谢您的信息。 NSCondition可能会帮助我很多! – Eonil 2010-02-07 14:48:20

+1

NP,我认为NSThreadWillExitNotification也可能有用,正如Laurent所建议的。祝你好运 – philsquared 2010-02-07 17:07:52

1

如果您使用pthreads,则使用:pthread_join

另一方面,如果您使用的是NSThread类,那么您所指的方法没有等同于加入的方法。

你可以尝试NSObject的室内用的信息performSelectorOnMainThread:withObject:waitUntilDone:

但我不完全相信你正试图在这里完成的。

Here's是Apple的多线程编程指南。

+0

对不起,我正在使用NSThread。有没有办法在NSThread上使用该方法? – Eonil 2010-02-07 12:18:47

+0

我没有完全理解你的问题,但你有没有看过NSThread文档? http://developer.apple.com/mac/library/documentation/cocoa/reference/Foundation/Classes/NSThread_Class/Reference/Reference.html – 2010-02-07 12:20:13

+0

是的,但我找不到像'waitForThreadExit'这样的方法。我会更清楚地更新我的问题。 – Eonil 2010-02-07 12:23:01

4

用Cocoa创建的线程不能创建为分离。出于资源管理的原因,NSThread实例总是包装附加的POSIX线程。由于报价在Thread Programming Guide

如果你想创建可连接 线程,这样做的唯一方法是使用 POSIX线程。 POSIX默认创建 线程为可连接。若要将 标记为脱离或可连接的线程, 在创建线程之前使用 pthread_attr_setdetachstate函数 修改线程属性。在线程开始后,您可以通过调用pthread_detach 函数将可连接线程更改为分离线程 。有关 这些POSIX线程函数的更多信息,请参见 pthread手册页。有关 如何加入线程的信息,请参阅 pthread_join手册页。

如果您正在寻找一种通知NSThread结束的方法,您可以使用NSThreadWillExitNotification通知。

+0

感谢您的回答。您的信息有用!我很抱歉无法将此设置为已接受的答案。如果我可以接受多个答案,我也应该接受。 – Eonil 2010-02-07 14:49:51

0

你可以使用NSConditionLock自己做到这一点。定义两个条件:“运行”和“终止”。工作线程获取锁“正在运行”,并在终止时以条件“终止”解锁。然后,加入将会获得锁“已终止”,然后解锁“已终止”。

+0

几乎有用...异常NSThread注册tsd destrcutor释放/释放(同时,当你期望胎面寿命结束...可以导致你的应用程序崩溃),这是一个可怕的设计(或超越)没有加入。 – bestsss 2012-06-16 08:52:47

相关问题