gpt4 book ai didi

javascript - emscripten webworker 的最小工作示例

转载 作者:可可西里 更新时间:2023-11-01 16:36:15 27 4
gpt4 key购买 nike

我正在尝试使用 emscripten 在 C++ 中构建一个基本的 webworker 示例。 API 看起来很简单,但我无法让它工作。我实际上想在我的项目中实现此功能,但在尝试制作一个最小示例失败后它也不起作用。

我有 main.cpp:

#include <emscripten/emscripten.h>
#include <emscripten/bind.h>
#include <iostream>

namespace e = emscripten;

int counter = 0;

void cback(char* data, int size, void* arg) {
std::cout << "Callback" << std::endl;
counter++;
}

void loop() {
std::cout << "Counter: " << counter << std::endl;
}

int main() {
std::cout << "Main func." << std::endl;
worker_handle worker = emscripten_create_worker("worker.js");
emscripten_call_worker(worker, "one", 0, 0, cback, (void*)42);

emscripten_set_main_loop(loop, 2, true);

return 0;
}

和worker.cpp:

#include <iostream>
#include <emscripten/emscripten.h>

extern "C" {

void one(char* data, int size) {
for(int i=0; i<10; i++) {
std::cout << "Worker" << std::endl;
emscripten_worker_respond_provisionally(0, 0);
}
emscripten_worker_respond(0, 0);
}
}

编译通过

emcc -std=c++11 main.cpp -o main.js
emcc -std=c++11 worker.cpp -s EXPORTED_FUNCTIONS="['_one']" -o worker.js

通过 <script> 加载一个简单的 js在 html 端标记。

主要加载和启动,输出 Main func.然后下载worker js。但是Worker也不Callback被输出。没有错误报告。

最佳答案

使用 BUILD_AS_WORKER 标志编译。

emcc -std=c++11 worker.cpp -s EXPORTED_FUNCTIONS="['_one']" -s BUILD_AS_WORKER=1 -o worker.js

关于javascript - emscripten webworker 的最小工作示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com