我喜欢从线程(使用emscripten编译)中调用某些global-context-js-function,但是无法访问global-Js-context(ReferenceError:未定义jsFunc)。我可以想象这个问题的主要原因是WebWorker(用于emscripten中的线程)无法访问global-js-context(例如window)。
是否有办法从cpp-emscripten-thread访问global-js-context?或者至少在线程和global-js-context之间使用某种事件总线?有什么交流的方法吗?
现在,我正在js上对cpp变量进行轮询,该变量由线程更改。我希望有更好的方法。
在下面找到此问题的示例。
也许我为此忽略了一些脚本功能?
谢谢
Benedikt。
#include <pthread.h>
#include <emscripten.h>
EM_JS(void, jsFunc, (int msg), {
// some function in global js context
myCustomLog(msg);
});
void* perform_work(void*) {
printf("in thread \n");
// this call of some global scope js function fails
// ReferenceError: jsFunc is not defined
jsFunc(1);
}
int main(int argc, char** argv) {
pthread_t thread;
printf("in main\n");
// this call of some global scope js function works fine
jsFunc(0);
pthread_create(&thread, NULL, perform_work, NULL);
}
内部版本:
emcc -o test.html -s USE_PTHREADS=1 ../main.cpp
答案 0 :(得分:0)
我找到了方法。
MAIN_THREAD_ASYNC_EM_ASM('myCustomLog(3);');
myCustomLog(3);
是浏览器主线程中的函数