小编Zac*_*chB的帖子

递归STL映射

我正在尝试制作一棵地图树(或者只是将一个地图的值指向另一个地图),但我不太确定如何解决这个问题。我找到了关于此的讨论:http://bytes.com/topic/c/answers/131310-how-build-recursive-map但我对那里发生的事情有点困惑。

例如,我的键是一个字符,我的值是下一个地图。这是假设的声明:

map< char, map< char, map< char.......>>>>>>>>>> root_map;
Run Code Online (Sandbox Code Playgroud)

c++ recursion dictionary stl

5
推荐指数
1
解决办法
4990
查看次数

在 Node.js 插件中使用 std::thread

想象一下,我使用 Node.js 插件中的同步函数:

var check_ok = addon.my_function(parameters);
var final_results = addon.final_function(parameters);
Run Code Online (Sandbox Code Playgroud)

但在方法代码中我有:

std::thread t[10]; //Global
//...
void my_function(const FunctionCallbackInfo<v8::Value>& args) {
//....
t[0] = thread(random_void_function, [parameters])
t[1] = thread(random_void_function_2, [parameters])
//...
}
//...
void final_results(const FunctionCallbackInfo<v8::Value>& args) {
//...
t[0].join();
t[1].join();
//...Give results.. etc
}
Run Code Online (Sandbox Code Playgroud)

所以我有两个插件的同步调用,但在这个插件中使用了两个线程。一个函数将启动线程,另一个函数将加入它们。问题是:random_void_function并且random_void_function_2会并行运行吗?既然my_functionfinal_function是同步的,那么random_void_functionrandom_void_function_2会阻塞事件循环吗?据我所知,他们没有阻止。

javascript c++ multithreading node.js node.js-addon

5
推荐指数
1
解决办法
807
查看次数

如何在创建节点加载项时传回c ++对象指针

我正在创建一个Node插件,以便将一些函数暴露libmpg123给Javascript.具体来说,我需要以某种方式将指向out123_handle对象的指针传回javascript,这是从out123_new生成的.这些示例没有提到将指针传回任何地方.我是C++以及Node插件的全新手,所以请保持温和.非常感谢您的帮助!

javascript c++ node.js node.js-addon

5
推荐指数
0
解决办法
168
查看次数

VS Code调试C++ Node Addon

我尝试在Visual Studio代码中为使用GYP编译的C++ Node-Addon设置调试.如果可能的话,我想逐步完成源代码.我使用typescript作为我的服务器语言,并包含由gyp编译的".node"文件.这工作正常,但我如何设置它,所以我不仅可以通过打字稿代码,还可以通过C++代码?

.cc文件的VSCode断点:

我知道我可以node-gyp rebuild --debug使用gyp 编译调试版本,但我没有计划如何在vscode中使用它.

c++ node.js visual-studio-code node.js-addon

5
推荐指数
1
解决办法
1519
查看次数

从特征矩阵外化数据

我试图取得内存支持的所有权Eigen::Matrix而不复制内存.该data()方法保留所有权.我弄清楚如何做到这一点的唯一方法是交换映射的数组:

Matrix<float, Dynamic, Dynamic, RowMajor> mat = m1 * m2;
// want ownership of mat's float*

float* data = mat.data(); // get the pointer
new (&mat) Eigen::Map<Matrix3f>(NULL); // swap the mapped array with anything else
// do something with data
Run Code Online (Sandbox Code Playgroud)

看起来这不会引起副本,但我并不积极.我也不确定这是否安全.

c++ eigen

5
推荐指数
1
解决办法
520
查看次数

Chrome 中打印时有最大页数吗?

我开发了一个显示大量数据的页面(~100 页),但打印预览在达到 86 页时会减少页数。

如果我更改打印预览属性中的缩小比例,页面上会显示更多数据,并且页数会减少。

Chrome 是否有页面限制或可以在打印预览中显示的数据限制?或者页面渲染的方式是否会导致打印预览(角度重复 div)出现问题?

编辑:

在 Firefox 中尝试过,保存为 PDF 时,Firefox 会打印所有页面,而 Chrome 则不会。

google-chrome print-preview

5
推荐指数
0
解决办法
2649
查看次数

获取一段时间间隔的内存高水位线

我正在尝试获取长时间运行的 Linux 进程在短时间内使用的最大内存量。例如,类似:

resetmaxrss(); // hypothetical new command
void* foo = malloc(4096);
free(foo);
getrusage(...); // 'ru_maxrss' reports 4096 plus whatever else is alive

resetmaxrss();
void* bar = malloc(2048);
free(bar);
getrusage(...); // 'ru_maxrss' reports 2048 + whatever, *not* 4096
Run Code Online (Sandbox Code Playgroud)

我发现并排除的选项:

  • getrusage的最大 RSS 无法重置。
  • cgmemtimewait4似乎在幕后使用,因此在进程运行时查询进程是不可行的。
  • tstime报告退出进程,因此在进程运行时查询进程也是不可行的。

其他选项,但都不好:

  • 轮询。很容易错过我们的简短分配。
  • 检测我们的代码。我们无法访问所有正在使用的内存分配器,因此这不会非常优雅或简单。为了准确性,我还宁愿使用操作系统报告的值。

除了提出 Linux 内核补丁之外,有没有办法做到这一点?

linux memory memory-management

5
推荐指数
1
解决办法
1496
查看次数

如何使用 node-addon-api 保存回调以供稍后使用?

我希望我的 C 库能够多次调用 JS 函数。我使用 Nan 让它工作,但在将其转换为 N-API/node-addon-api 时遇到问题。

如何保存 JS 回调函数并稍后从 C 调用它?

这是我使用 Nan 得到的结果:

Persistent<Function> r_log;
void sendLogMessageToJS(char* msg) {
    if (!r_log.IsEmpty()) {
        Isolate* isolate = Isolate::GetCurrent();
        Local<Function> func = Local<Function>::New(isolate, r_log);
        if (!func.IsEmpty()) {
        const unsigned argc = 1;
        Local<Value> argv[argc] = {
            String::NewFromUtf8(isolate, msg)
        };
        func->Call(Null(isolate), argc, argv);
        }
    }
}
NAN_METHOD(register_logger) {
    Isolate* isolate = info.GetIsolate();
    if (info[0]->IsFunction()) {
        Local<Function> func = Local<Function>::Cast(info[0]);
        Function * ptr = *func;
        r_log.Reset(isolate, func);
        myclibrary_register_logger(sendLogMessageToJS);
    } else { …
Run Code Online (Sandbox Code Playgroud)

node.js node.js-addon n-api

5
推荐指数
1
解决办法
1245
查看次数

如何异步使用node-addon-api的AsyncContext

的文档AsyncContext具有可同步工作的此示例(仅作了少许修改,但仍可正常工作):

#include "napi.h"

void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info)
{
  Napi::Function callback = info[0].As<Napi::Function>();
  Napi::Object resource = info.Env().Global().As<Napi::Object>();;    
  Napi::AsyncContext context(info.Env(), "async_context_test", resource);

  callback.MakeCallback(Napi::Object::New(info.Env()),
      std::initializer_list<napi_value>{}, context);
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何异步使用它-这是我的最新照片:

Napi::AsyncContext* _context;
Napi::FunctionReference* _callback;
Napi::Object* _resource;

void CallBack()
{
  _callback->MakeCallback(*_resource, std::initializer_list<napi_value>{}, *_context);
}

void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info)
{
  Napi::Function cb = info[0].As<Napi::Function>();
  _callback = new Napi::FunctionReference(Napi::Persistent(cb));
  _callback->SuppressDestruct();

  _resource = new Napi::ObjectReference(Napi::Persistent(env.Global()));
  _resource->SuppressDestruct();

  _context = new Napi::AsyncContext(info.Env(), "async_context_test", _resource->Value());

  // run CallBack() in different thread
}
Run Code Online (Sandbox Code Playgroud)

程序内部崩溃CallBack()

node.js node.js-addon n-api node-addon-api

5
推荐指数
1
解决办法
247
查看次数

一起使用 OIDC 和 SCIM 有意义吗?

我希望我的应用程序能够使用客户 Azure AD 中的外部用户池,而不必在我的应用程序中手动创建每个用户(当他们已在 Azure AD 中拥有这些用户时)。

最初,我认为仅使用 OIDC,因为我可以在第一次登录时在我的应用程序中创建用户。但是,当用户在 Azure AD 中被删除时,OIDC 不允许我在应用程序中注销并停用用户。这是我的申请的一个重要要求。

为了解决这个问题,我想我可以结合 OIDC 和 SCIM:

  1. Azure AD 通过 SCIM 端点向我的应用程序配置用户。停用后,Azure 通过 SCIM 端点通知我的应用程序,我可以删除它们的会话并在我的应用程序中停用它们。
  2. 登录由 OIDC 处理。当我拥有有效的 OIDC 令牌时,我会在应用程序中创建一个会话。这样我就不必在我的应用程序中管理密码或多因素身份验证。

SCIM 和 OIDC 一起使用有意义吗?

scim azure-active-directory openid-connect

5
推荐指数
1
解决办法
2205
查看次数