2015-08-29 24 views
8

C++ ile emscripten temel bir webworker örneği oluşturmaya çalışıyorum. API çok basit görünüyor, ancak çalışamıyorum. Aslında bu işlevselliği projemde uygulamak istedim, ancak başarısız olduktan sonra en az bir örnek oluşturmaya çalıştı ve işe yaramadı. main.cppEmscripten webworker için en az çalışma örneği

Ben var:

#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; 
} 

ve 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); 
} 
} 

html tarafında <script> etiketi aracılığıyla

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

ve js basit yük yoluyla derlenmiş .

Ana yükler ve başlatır, çıkışlar Main func. ve sonra çalışan js indirilir. Ancak ne Worker ne de Callback çıktı. Hata bildirilmedi.

+0

Emcc yerine amcc çalıştırıyor mu fark yaratıyorsunuz? –

+1

Neden "emscripten/bind.h" dosyasını kullanıyorsunuz? –

cevap

8

BUILD_AS_WORKER bayrağı ile derleyin.

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