8
我想用emscripten在C++中構建一個基本的webworker示例。該API看起來很簡單,但我無法得到它的工作。我其實想在我的項目中實現這個功能,但是在失敗之後嘗試做一個最小的例子,它也不起作用。emscripten webworker的最小工作示例
我已經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);
}
}
通過<script>
標籤通過
emcc -std=c++11 main.cpp -o main.js
emcc -std=c++11 worker.cpp -s EXPORTED_FUNCTIONS="['_one']" -o worker.js
和一個簡單的JS負荷編譯的HTML側。
主負載和啓動,輸出Main func.
然後下載工人js。但輸出Worker
和Callback
都沒有。沒有錯誤報告。
是否運行em ++而不是emcc有所作爲? –
你爲什麼要導入'emscripten/bind.h'? –