use*_*088 6 pthreads emscripten
我正在尝试使用Emscripten的线程,我不明白它是如何工作的.我已经阅读了一些关于网络工作者的文章,我不太清楚.
当我查看"tests"文件夹时,我可以看到pthread的东西.
我正在使用"std :: thread"并收到以下错误:
unresolved symbol: pthread_create
Run Code Online (Sandbox Code Playgroud)
我是否必须使用Web worker而不是默认线程?
谢谢!
正在添加对pthread的支持,并且已经可以使用一些设置.由于std :: thread在引擎盖下使用pthread,你也可以使用它.有关更多信息,请参阅此讨论.
我必须做的事情:
我在编写一个实际运行的pthread示例时遇到了麻烦,但这里的代码使用std :: thread来演示对我有用的基本功能:
// main.cpp
#include <thread>
#include <iostream>
void func()
{
std::cout << "I'm a thread!\n";
}
int main()
{
std::thread test1(func);
std::thread test2(func);
std::thread test3(func);
// join seems to lock up the browser
//test1.join();
//test2.join();
//test3.join();
}
Run Code Online (Sandbox Code Playgroud)
我已经能够在一个更大的项目中使用线程(对于这里的帖子来说很大!),所以它们是可行的.它们并不是那么快,我担心,尽管这可能随着时间的推移而改善.
建立它:
emcc main.cpp -o main.html -s USE_PTHREADS = 1 --std = c ++ 11
Firefox Nightly 42.0a1(2015-07-16)输出:
预先分配1名工人为pthread产卵池.
预先分配1名工人为pthread产卵池.
预先分配1名工人为pthread产卵池.
我是个帖子!
我是个帖子!
我是个帖子!
不幸的是,多线程代码无法用 Emscripten 编译。Web Worker 允许同时计算,但它们无法维护共享状态,因此无法替代线程。
请参阅: http ://kripken.github.io/emscripten-site/docs/porting/guidelines/portability_guidelines.html
编辑:正如其他人指出的那样,Emscripten 自我最初的答案以来一直在向前发展,现在对 pthreads 提供了实验性支持(可能很快就会对 C++ 内置线程提供支持) https://groups.google.com/forum/#!topic /emscripten-讨论/gQQRjajQ6iY