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
不能线程间共享
我正在处理从 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
不能线程间共享