【发布时间】:2014-03-13 13:23:45
【问题描述】:
考虑这段代码:
[self otherStuff];
// "wait here..." until something finishes
while(!self.someFlag){}
[self moreStuff];
请注意,这一切都发生在同一线程上 - 我们不想转到另一个线程。
otherStuff 可以做一些事情,比如连接到云端、从用户那里获取输入等等,所以这会花费很多时间并且可以遵循许多可能的路径。
当 otherStuff 最终完成时,otherStuff 会将 self.someFlag 设置为 true。
这很完美,完全没有问题——除了像这样用空循环烧毁处理器是蹩脚的!!
很简单,有没有办法说类似..
halt here, until (some message, interrupt, flag, boolean, whatever?)
而不仅仅是 while(!self.someFlag){}
(请注意,另一种方法是“链接”过程......所以在“otherStuff”结束时,您和所有其他程序员必须“知道”接下来您必须调用“moreStuff”,无论otherStuff 如何发挥作用,等等。当然,当您必须添加新程序或更改事物的顺序时,这会非常混乱。)干杯!!
顺便说一句,当您想要不同的线程时,下面已经有两个很好的答案。
【问题讨论】:
-
我认为你应该考虑 NSLock 和 NSCondition。它比无限循环更合适。
-
我只是好奇。为什么需要这样的内联解决方案?
-
malex -- 嗯,我真的不明白 NSLocking 在这里有什么帮助。也许我错过了一些东西。 Andrey - 查看第一个示例虚构代码块。移动项目、添加项目等将非常容易/优雅。继续写一个非内联解决方案!
-
你还在等什么?
-
sleep(1000000)会满足您的问题吗?waithere可以恢复吗,如果可以,什么时候恢复?
标签: ios objective-c semaphore promise nsnotificationcenter