Emscripten:不能在 pthread 中使用 emscripten::val

Emscripten: Can't using emscripten::val in pthread

我正在处理从 C++ 附加视频的项目。

我已成功从 C++ 创建视频元素。

video = emscripten::val::global("document").call<emscripten::val>("createElement", emscripten::val("video"));
video.set("src", emscripten::val("http://jplayer.org/video/webm/Big_Buck_Bunny_Trailer.webm"));  
video.set("crossOrigin", emscripten::val("Anonymous"));
video.set("autoplay", emscripten::val(true));
video.call<void>("load");

但问题是我必须等到视频缓冲区加载足够才能播放。

我的解决方案是使用 pthread 创建线程,等待视频缓冲区加载足够多,然后处理视频。

 pthread_create(&threadVideo, NULL, attachVideo, NULL);

并在 attachVideo 函数中

void *attachVideo(void *arg)
{
    pthread_detach(pthread_self());
    cout << "ready to run" << endl;
    cout << "readyState: " << video["readyState"].as<int>() << endl;
    pthread_exit(NULL);
}

当我 运行 出现错误时:无法读取未定义的属性(读取 'value')"

有人可以帮我解决这个问题吗?

这是因为emscripten::val在JS中代表一个对象,JS状态都是线程局部的。换个说法:每个线程拿到的都是自己的JS环境,所以emscripten::val不能线程间共享