2015-08-29 4 views
8

Я пытаюсь создать пример базового веб-рабочего на 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. Ошибок не сообщалось.

+0

Выполняет ли работа em ++ вместо emcc, делает разницу? –

+1

Почему вы импортируете 'emscripten/bind.h'? –

ответ

8

Скомпилировать с BUILD_AS_WORKER флаг.

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

 Смежные вопросы

  • Нет связанных вопросов^_^