@@ -10,7 +10,6 @@ constexpr size_t ARRAY_LENGTH = 10;
1010constexpr size_t MAX_QUEUE_SIZE = 2 ;
1111
1212static std::thread threadsEx[2 ];
13- static ThreadSafeFunction tsfnEx;
1413
1514struct ThreadSafeFunctionInfo {
1615 enum CallType {
@@ -24,6 +23,19 @@ struct ThreadSafeFunctionInfo {
2423 uint32_t maxQueueSize;
2524} tsfnInfoEx;
2625
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+
2739// Thread data to transmit to JS
2840static int intsEx[ARRAY_LENGTH];
2941
@@ -49,19 +61,16 @@ static void DataSourceThreadEx() {
4961 bool queueWasClosing = false ;
5062 for (int index = ARRAY_LENGTH - 1 ; index > -1 && !queueWasClosing; index--) {
5163 napi_status status = napi_generic_failure;
52- auto callback = [](Env env, Function jsCallback, int * data) {
53- jsCallback.Call ({ Number::New (env, *data) });
54- };
5564
5665 switch (info->type ) {
5766 case ThreadSafeFunctionInfo::DEFAULT:
5867 status = tsfnEx.BlockingCall ();
5968 break ;
6069 case ThreadSafeFunctionInfo::BLOCKING:
61- status = tsfnEx.BlockingCall (&intsEx[index], callback );
70+ status = tsfnEx.BlockingCall (&intsEx[index]);
6271 break ;
6372 case ThreadSafeFunctionInfo::NON_BLOCKING:
64- status = tsfnEx.NonBlockingCall (&intsEx[index], callback );
73+ status = tsfnEx.NonBlockingCall (&intsEx[index]);
6574 break ;
6675 }
6776
@@ -135,7 +144,7 @@ static Value StartThreadInternalEx(const CallbackInfo& info,
135144 tsfnInfoEx.startSecondary = info[2 ].As <Boolean>();
136145 tsfnInfoEx.maxQueueSize = info[3 ].As <Number>().Uint32Value ();
137146
138- tsfnEx = ThreadSafeFunction ::New (info.Env (), info[0 ].As <Function>(),
147+ tsfnEx = TSFN ::New (info.Env (), info[0 ].As <Function>(), Object::New (info. Env () ),
139148 " Test" , tsfnInfoEx.maxQueueSize , 2 , &tsfnInfoEx, JoinTheThreadsEx, threadsEx);
140149
141150 threadsEx[0 ] = std::thread (DataSourceThreadEx);
0 commit comments