Я пытаюсь создать пример базового веб-рабочего на C++ с помощью emscripten. API выглядит очень просто, но я не могу заставить его работать. Я действительно хотел реализовать эту функциональность в своем проекте, но после неудачной попытки сделать минимальный пример, и он также не работает.Минимальный рабочий пример для рабочего стола emscripten
Я 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
и простой JS нагрузки через <script>
тег на стороне HTML ,
Основные нагрузки и запуски, выходы Main func.
, а затем загружен рабочий js. Но не выводятся ни Worker
, ни Callback
. Ошибок не сообщалось.
Выполняет ли работа em ++ вместо emcc, делает разницу? –
Почему вы импортируете 'emscripten/bind.h'? –