forked from emscripten-core/emscripten
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathembind_lib_with_asyncify.cpp
More file actions
66 lines (50 loc) · 1.25 KB
/
embind_lib_with_asyncify.cpp
File metadata and controls
66 lines (50 loc) · 1.25 KB
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)
;
}