Sto cercando di creare un esempio di base per il webworker in C++ con emscripten. L'API sembra molto semplice, ma non riesco a farlo funzionare. In realtà volevo implementare questa funzionalità nel mio progetto, ma dopo aver fallito ho cercato di fare un esempio minimo e anche questo non funziona.Esempio di funzionamento minimo per webworker emscripten
ho 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;
}
e 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);
}
}
compilato via
emcc -std=c++11 main.cpp -o main.js
emcc -std=c++11 worker.cpp -s EXPORTED_FUNCTIONS="['_one']" -o worker.js
e caricare un semplice js tramite <script>
tag sul lato html .
Principali carichi e avviamenti, uscite Main func.
e quindi worker js viene scaricato. Ma né Worker
né Callback
viene prodotto. Nessun errore segnalato.
L'esecuzione di em ++ invece di emcc fa la differenza? –
Perché importate 'emscripten/bind.h'? –