我设法编译(没有错误)使用旧版本中的pthreads和新版本中的glib gthreads的fluidynth库。但是,在swf中,我分别得到运行时错误Undefined sym: _pthread_attr_init
和Undefined sym: _g_thread_init
。
就线程而言,这是死路一条,还是有办法让这项工作成功? (或者我是否在最后的连接阶段跳过某些东西?)
对于gthreads,this doc提到自定义线程实现:
使用g_thread_init()初始化线程系统,它为可选的自定义线程实现或默认实现的NULL。
我知道炼金术不支持原生线程,但是为了这个目的可以使用一些虚假的绿色线程实现吗?
答案 0 :(得分:1)
由于Flash Player没有线程化,因此您的Alchemy C代码无法进行线程化。但是,您可以使用Alchemy中的“绿色线程”来解决它。
当您调用通过AS3_FunctionAsync公开的函数时,只要调用flyield,它就会暂停,允许其他代码运行,然后“稍后”恢复。
我认为你的AS3代码无法同时调用两个或多个AS3_FunctionAsync包装的函数是没有任何理由的。由于您的代码是线程安全的,因此可能只是工作。请注意,您必须在整个代码中放置flyield以使其更好(这非常类似于旧操作系统的“协作式多任务处理”)。
无论如何它值得一试。