gpt4 book ai didi

V8 中的 Javascript 等价物?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:32 26 4
gpt4 key购买 nike

我正在玩 NodeJS 和 V8,试图同时学习这两者。

我想用 C++ 翻译这个简单的 JS 行。

global.Game = { sleep: call_some_CPP_function }; 

在过去的两天里,我一直在拼凑在 Internet 上找到的代码和其他人的源代码,试图了解它是如何工作的,但我并没有得到太多。

下面的代码不起作用,如果我执行 console.log(global.Game),我什么也得不到。

#include "node.h"
#include "v8.h"

namespace node{

using namespace v8; // make life easier

// define a sleepy thread blocker
Handle<Value> call_some_CPP_function(const FunctionCallbackInfo<Value>& a){
HandleScope scope(node_isolate);
Sleep(3);
return scope.Close(Undefined());
}

// let's create the object here
// I'm calling this function elsewhere
void execme(){

// I've read somewhere that I have to do this
Locker locker(node_isolate);
HandleScope scope(node_isolate);

// I think these two set the execution context (variables) and "this" accordingly
// but I'm not sure
Local<Context> context = node_isolate->GetCurrentContext();
Context::Scope context_scope(context);

// I need a reference to the global object, to assign my "Game" object
Local<Object> global = node_env->context()->Global();

// The only way is to invent a constructor for it
Local<FunctionTemplate> function_template = FunctionTemplate::New();
function_template->SetClassName(String::New("GameClass"));

// and create a new instance using that constructor
Local<Object> game_object = function_template->GetFunction()->NewInstance();

// after that, add the "sleep" function, which executes the function above
NODE_SET_METHOD(game_object, "sleep", call_some_CPP_function);

// and finally do the global.Game assignment
global->Set(String::New("Game"), game_object);
}

}

最佳答案

game.cc

#include <node.h>
#include <v8.h>

using namespace v8;

// sleep 3 seconds
Handle<Value> Sleep(const Arguments& args) {
HandleScope scope;
Sleep(3000);
return scope.Close(Undefined());
}

void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("sleep"),
FunctionTemplate::New(Sleep)->GetFunction());
}

NODE_MODULE(game, init)

app.js

global.Game = require('./build/Release/game');

console.log(global.Game); // this will print "{ sleep: [Function] }"

//now you can call native sleep
Game.sleep();

文档:http://nodejs.org/api/addons.html#addons_hello_world

关于V8 中的 Javascript 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21322185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com