@@ -10,7 +10,6 @@ constexpr size_t ARRAY_LENGTH = 10;
10
10
constexpr size_t MAX_QUEUE_SIZE = 2 ;
11
11
12
12
static std::thread threadsEx[2 ];
13
- static ThreadSafeFunction tsfnEx;
14
13
15
14
struct ThreadSafeFunctionInfo {
16
15
enum CallType {
@@ -24,6 +23,19 @@ struct ThreadSafeFunctionInfo {
24
23
uint32_t maxQueueSize;
25
24
} tsfnInfoEx;
26
25
26
+ static void TSFNCallJS (Env env, Function jsCallback,
27
+ ThreadSafeFunctionInfo * /* context */ , int *data) {
28
+ // If called with no data
29
+ if (data == nullptr ) {
30
+ jsCallback.Call ({});
31
+ } else {
32
+ jsCallback.Call ({Number::New (env, *data)});
33
+ }
34
+ }
35
+
36
+ using TSFN = ThreadSafeFunctionEx<ThreadSafeFunctionInfo, int , TSFNCallJS>;
37
+ static TSFN tsfnEx;
38
+
27
39
// Thread data to transmit to JS
28
40
static int intsEx[ARRAY_LENGTH];
29
41
@@ -49,19 +61,16 @@ static void DataSourceThreadEx() {
49
61
bool queueWasClosing = false ;
50
62
for (int index = ARRAY_LENGTH - 1 ; index > -1 && !queueWasClosing; index--) {
51
63
napi_status status = napi_generic_failure;
52
- auto callback = [](Env env, Function jsCallback, int * data) {
53
- jsCallback.Call ({ Number::New (env, *data) });
54
- };
55
64
56
65
switch (info->type ) {
57
66
case ThreadSafeFunctionInfo::DEFAULT:
58
67
status = tsfnEx.BlockingCall ();
59
68
break ;
60
69
case ThreadSafeFunctionInfo::BLOCKING:
61
- status = tsfnEx.BlockingCall (&intsEx[index], callback );
70
+ status = tsfnEx.BlockingCall (&intsEx[index]);
62
71
break ;
63
72
case ThreadSafeFunctionInfo::NON_BLOCKING:
64
- status = tsfnEx.NonBlockingCall (&intsEx[index], callback );
73
+ status = tsfnEx.NonBlockingCall (&intsEx[index]);
65
74
break ;
66
75
}
67
76
@@ -135,7 +144,7 @@ static Value StartThreadInternalEx(const CallbackInfo& info,
135
144
tsfnInfoEx.startSecondary = info[2 ].As <Boolean>();
136
145
tsfnInfoEx.maxQueueSize = info[3 ].As <Number>().Uint32Value ();
137
146
138
- tsfnEx = ThreadSafeFunction ::New (info.Env (), info[0 ].As <Function>(),
147
+ tsfnEx = TSFN ::New (info.Env (), info[0 ].As <Function>(), Object::New (info. Env () ),
139
148
" Test" , tsfnInfoEx.maxQueueSize , 2 , &tsfnInfoEx, JoinTheThreadsEx, threadsEx);
140
149
141
150
threadsEx[0 ] = std::thread (DataSourceThreadEx);
0 commit comments