我正在使用 Grand Central Dispatch 在后台运行一个进程。我想知道如何暂停、恢复和停止该后台线程。我试过了
dispatch_suspend(background_thread);
dispatch_resume(background_thread);
但是这些功能对我没有帮助,它一直在运行。请有人帮助我。
最佳答案
你好像有点糊涂了。线程的直接操作不是 GCD API 的一部分。您通常操作的 GCD 对象是队列,而不是线程。您将 block 放入队列中,然后 GCD 在它需要的任何线程上运行这些 block 。1
此外,the dispatch_suspend
man page是这样说的:
The dispatch framework always checks the suspension status before executing a block, but such changes never affect a block during execution (non-preemptive).
换句话说,当队列正在运行一个 block 时,GCD 不会挂起队列。它只会在队列位于 block 之间时挂起队列。
我不知道有任何公共(public) API 可以让您在不与该线程上运行的函数合作的情况下停止线程(例如,通过设置一个在该线程上定期检查的标志)。
如果可能,您应该分解长时间运行的计算,以便您可以在连续的 block 中逐步处理它。然后你可以暂停运行这些 block 的队列。
脚注 1. 主队列除外。如果您将一个 block 放在主队列上,GCD 只会在主线程上运行该 block 。
关于ios - 暂停和恢复 Grand Central Dispatch 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652053/