Skip to content

Commit 91e8859

Browse files
committed
test: Modify TSFNEx threadsafe to use TSFNEx
1 parent 2da3023 commit 91e8859

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

test/threadsafe_function_ex/threadsafe.cc

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ constexpr size_t ARRAY_LENGTH = 10;
1010
constexpr size_t MAX_QUEUE_SIZE = 2;
1111

1212
static std::thread threadsEx[2];
13-
static ThreadSafeFunction tsfnEx;
1413

1514
struct 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
2840
static 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

Comments
 (0)