1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#include <assert.h>
#include <string>
#include <emscripten.h>
#include <emscripten/bind.h>
using namespace emscripten;
EM_JS(int, sleep_and_return, (int x), {
return Asyncify.handleSleep(wakeUp => setTimeout(wakeUp, 10, x));
});
void delayed_throw() {
sleep_and_return(0);
EM_ASM({ throw new Error('my message'); });
}
int foo() {
return sleep_and_return(10);
}
class Bar {
public:
Bar(): x(sleep_and_return(20)) {}
int getX() const {
return x;
}
int method() {
return sleep_and_return(30);
}
int method_without_async_calls() {
return 40;
}
void void_method_without_async_calls() {}
void void_method_with_async_calls() {
sleep_and_return(0);
}
static int static_method() {
return sleep_and_return(50);
}
private:
int x;
};
EMSCRIPTEN_BINDINGS(embind_async) {
function("delayed_throw", &delayed_throw);
function("foo", &foo);
class_<Bar>("Bar")
.constructor<>()
.function("method", &Bar::method)
.function("method_without_async_calls", &Bar::method_without_async_calls)
.function("void_method_without_async_calls", &Bar::void_method_without_async_calls)
.function("void_method_with_async_calls", &Bar::void_method_with_async_calls)
.class_function("static_method", &Bar::static_method)
.property("x", &Bar::getX)
;
}
|