1

我已经设法编译(没有错误)在旧版本中使用 pthreads 和在新版本中使用 glib gthreads 的流体合成库。但是,在 swf 中,我分别得到运行时Undefined sym: _pthread_attr_init错误Undefined sym: _g_thread_init

就线程而言,这是死胡同,还是有办法使这项工作?(或者我在最后的链接阶段跳过了什么?)

在 gthreads 的情况下,该文档提到了自定义线程实现:

线程系统使用 g_thread_init() 进行初始化,它采用可选的自定义线程实现或默认实现为 NULL。

我知道炼金术不支持本机线程,但是可以为此目的使用一些假的绿色线程实现吗?

4

1 回答 1

1

由于 Flash Player 没有线程化,因此您的 Alchemy C 代码无法线程化。但是,您可以使用 Alchemy 中的“绿色线程”来解决它。

当您调用通过 AS3_FunctionAsync 公开的函数时,只要调用flyield,它将暂停自身,允许其他代码运行,然后将“稍后”恢复。

我认为您的 AS3 代码没有任何理由不能同时调用两个或多个 AS3_FunctionAsync 包装的函数。由于您的代码是线程安全的,因此可能会正常工作。请注意,您必须在整个代码中都放置flyield,以使其运行良好(这非常类似于旧操作系统的“协作多任务”)。

无论如何它值得一试。

于 2011-07-26T15:44:33.537 回答