等到dispatch_async线程结束

时间:2012-08-24 15:40:22

标签: objective-c grand-central-dispatch

我是Objective C的新人。 我有一个对象,它通过GCD在默认队列中使用dispatch_async创建新线程。 我在线程中使用dispatch_semaphore_wait和timeout = 1sec来检查我何时需要关闭此线程。

当我调用“close”方法时,它会发送dispatch_semaphore_signal并关闭线程。但有时线程会在“关闭”方法结束后生存一段时间。我怎么能等待我的“关闭”方法,直到线程结束?

THX。

1 个答案:

答案 0 :(得分:3)

这个问题的典型答案:你想做什么?

我问这个问题是因为,首先,您既不需要知道或不关心有支持GCD请求的线程以及何时退出 - 这完全由GCD来管理。

其次,您应该始终怀疑使用显式超时的代码(“FOREVER”除外)。如果你有任何理由问自己“为什么1秒?如果我等待的任何事件花费的时间多于或少于此,会发生什么?”那么你正在进行那种导致民意调查的思维方式,而民意调查对于几乎所有东西来说都是糟糕的(邪恶的,错误的)设计,只是写了某些类型的设备驱动程序!

更合理的方法是在操作结束时使用完成回调来表示它已完成,采用完全异步的编程方法,并在此过程中遵循GCD的基本设计原则之一。

听起来对我而言,我只是在猜测,你正在采用现有的编程范式或思维方式并错误地将其应用于GCD。这是一个可以理解的错误,但仍然是一个错误。

相关问题