应该从主线程中调用许多函数。在我有限的经验中,这些主要是UI功能。
例子: - 必须从……调用[UIApplication delegate]
是的,您可以从任何上下文调用程序中的任何函数。注意使用 getcontext 和 setcontext 没有真正的“线程”,你没有得到任何并行处理 - 你只是得到调度。这就是为什么它会起作用,无论它是否是UI功能。它基本上只是一个跨功能的goto。引用 手册页 直:
getcontext
setcontext
如果通过调用getcontext(),程序获得上下文 执行继续,就像刚刚返回此调用一样。
这意味着如果我写
... code ... getcontext(&cxt); ... code ... setcontext(&cxt);
然后当我到达 setcontext ,我去的州是 相同 当功能 getcontext 刚回来没有可察觉的差异(当然,你可能在平均时间内改变了记忆值,但这不是重点)。该联机帮助页具有类似的保证 makecontext ,但请注意,在给定的函数完成执行后它会重定向你。
makecontext
您提供的示例是更高级别的编程语言,它们具有更高的复杂性,因此不那么简单 setcontext / getcontext 在 C 。您发布的Java错误似乎实际上是一个独特的OS线程,与第三个示例相同。第一个示例看起来可能是假线程,但当然有隐藏的复杂性可能会阻止UI调用工作(因为它们与外部API交互)。
C
这就是JS中的线程如此简单的原因:因为线程不是真实的。您可以通过调度函数和ajax调用在任何地方调用任何内容而获得的并行性能损失。
如果您知道您的光纤库实际上只是使用 getcontext 和 setcontext 那你就没事了。虽然库可能会做其他事情,但在这种情况下与库编写者进行验证会更好。