Hi Ben, Thanks for the reply. My program is actually a MacOS application and it uses its SDK to create threads. I am using v8::Locker to ensure that only one thread is accessing the isolate. And this works quite well. I can also use the MacOS SDK to schedule some work on any thread. The problem I am having is how to hook into V8 promises so that I can control over which thread the resolve callback i executed.
For example JavaScriptCore has the possibility to specify a callback when initializing the global object which allows to control and customize how are the promise callbacks executed: https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSGlobalObject.cpp#L341 I am looking for a similar API in V8 if it exists. On Tuesday, February 11, 2020 at 10:31:18 PM UTC+2, Ben Noordhuis wrote: > > On Tue, Feb 11, 2020 at 8:42 PM Darin Dimitrov <darin....@gmail.com > <javascript:>> wrote: > > > > I am embedding V8 in my C++ application and I have registered a custom > "test" function on the global object taking a callback as parameter: > > > > test(function() { > > console.log("callback"); > > }); > > > > The "test" function starts a new thread and executes the callback on > this thread. > > > > Now I can wrap this function in a Promise: > > > > new Promise(function(resolve, reject) { > > test(resolve); > > }).then(function() { > > console.log("this callback is executed on the background thread > created by the 'test' function"); > > }); > > > > I am looking for a way to somehow hook into V8 promises so that they are > always resolved on the main thread of my application. > > > > I thought that using a custom platform might help but couldn't find any > useful method that I can override. It does provide the "CallOnWorkerThread" > method but can I relate this to promises? Does V8 provide some API to > intercept and replace the promise implementation? > > Some additional info is needed because it's not wholly clear to me how > you envision this would work. How exactly is your program using > threads? > > A V8 isolate is not reentrant. You can migrate it between threads but > only one thread can enter it (and should hold a v8::Locker to ensure > that it's the only one.) > > You have some control over when microtasks (promises) are executed > with isolate->SetMicrotasksPolicy(MicrotasksPolicy::kExplicit) and > isolate->RunMicrotasks(). > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/388db44a-528e-48b1-bb7e-e96f1d7ee4e9%40googlegroups.com.