0

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

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

谢谢。

4

1 回答 1

3

对这样一个问题的典型回答:你想做什么?

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

其次,您应该始终对使用显式超时的代码持怀疑态度(“永远”除外)。如果你有任何理由问自己“为什么是 1 秒?如果我等待的任何事件花费的时间比这更多或更少会发生什么?” 那么你正在从事导致轮询的那种思维,而轮询对于几乎所有东西来说都是 BAD BAD(邪恶,错误)的设计,除了编写某些类型的设备驱动程序!

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

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

于 2012-08-25T01:57:27.050 回答