小编Ben*_*igt的帖子

将STDIN与AllocConsole()一起使用

我有一个第三方dll,我加载到不是我的软件,我正在使用AllocConsole()创建标准的Windows CLI窗口,所以我有一个简单的方法输出调试消息.

我的问题是,它忽略了任何类型的输入.我只是希望能够使用我分配的控制台,并使我能够给它一些输入.

c++ winapi windows-console

6
推荐指数
1
解决办法
1万
查看次数

在WOW64中捕获HANDLE创建

我正在尝试解决第三方二进制文件的缓慢启动问题(无源).它是在64位Windows 7上运行的32位应用程序.

我已经使用调试器进入应用程序,而它在启动期间挂起了0%的CPU使用率,它似乎正在等待ReadFile返回.第一个参数ReadFile是句柄值000000f0.windbg的!handle命令告诉我:

Handle f0
  Type            File
  Attributes      0
  GrantedAccess   0x120189:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr,WriteAttr
  HandleCount     2
  PointerCount    4
  No Object Specific Information available
Run Code Online (Sandbox Code Playgroud)

我想知道这对应的设备.但是,Sysinternals Process Explorer在其进程句柄列表中不包含此句柄.

我使用windbg跟踪所有调用ntdll!NtCreateFile并打印路径并返回句柄:此句柄不在其中.断点on kernel32!CreateNamedPipeW,kernel32!CallNamedPipeWkernel32!WaitNamedPipeW永远不会被触发(这很奇怪,因为Process Explorer确实显示了另一个带路径的句柄\Device\NamedPipe\).

作为参考,这是在Windows x64上跟踪NtCreateFile(akak ZwCreateFile)的命令:

bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"
Run Code Online (Sandbox Code Playgroud)

感谢Skywing指出我正确的方向.

还有File哪种类型的HANDLE 来自哪里?不要将其他HANDLE创建函数委托给NtCreateFile实际的系统调用(我猜不是)?

windows winapi windbg wow64 handle

6
推荐指数
1
解决办法
611
查看次数

用"不确定带"显示数据与时间的关系

为将非编程问题带到SO之前提前道歉,但权力已经确定所有与MATLAB相关的问题都属于此.

我一直在做一些卡尔曼滤波器并绘制状态变量估计值,以了解它们如何随时间收敛.现在,我想直观地表示协方差矩阵,这表明估计的不确定性.所以我写了一个小功能,为估计周围的乐队着色.

(编辑注释:2*cov当需要2个标准偏差时,先前版本误用于每个半波段的宽度)

function [ls, regions] = plotuncertain( t, y, cov )
    t = t(:);
    y = y(:);
    stdev = cov(:).^(1/2);
    a = ones(size(t));
    regions(1) = patch('XData', [t; t(end:-1:1)], ...
                       'YData', [y + 2*stdev; y(end:-1:1)], ...
                       'FaceVertexAlphaData', [0*a; a], ...
                       'FaceAlpha', 'interp', 'EdgeColor', 'none');
    regions(2) = patch('XData', [t; t(end:-1:1)], ...
                       'YData', [y - 2*stdev; y(end:-1:1)], ...
                       'FaceVertexAlphaData', [0*a; a], ...
                       'FaceAlpha', 'interp', 'EdgeColor', 'none');
    ls = line('XData', t, 'YData', y);
Run Code Online (Sandbox Code Playgroud)

它看起来很合理:

一个不确定的锥体

但我有两个具有相似含义的状态变量,我想在一个轴上同时绘制.

两个不确定的锥体

呃哦,k_1的初始数据被k_2频段的(上半部分)遮挡了.MATLAB没有按照我提交的顺序绘制线条和补丁.即使我设法控制他们绘制的顺序,alpha混合仍然不如基于概率混合颜色最佳.

任何想法如何同时渲染两个?我可以以某种方式利用我为两个变量使用两个不同颜色平面这一事实吗?

matlab matlab-figure kalman-filter

6
推荐指数
1
解决办法
758
查看次数

避免重复存储地图密钥

假设我有一个std::map<std::string, T>(或unordered_map),我想从迭代器/引用/指向内容的指针访问密钥.

有没有办法做到这一点,没有std::string密钥的两个副本(一个由地图拥有,一个在内容对象内)?一个人可以参考另一个吗?

c++ reference stdmap

6
推荐指数
1
解决办法
899
查看次数

这个指针是如何被捕获的?

请考虑以下代码:

struct S
{
  int x;
  void f()
  {
    auto l = [&](){ x = 42; }; //this is implicitly captured here
  }
};
Run Code Online (Sandbox Code Playgroud)

§5.1.2/ 14指出:

如果隐式捕获实体并且捕获默认值为=,或者使用不包含&的捕获显式捕获实体,则通过副本捕获实体.

因此,我得出结论,这this不是由副本捕获的.但是后来§5.1.2/ 15:

如果实体是隐式或显式捕获但未通过复制捕获,则通过引用捕获实体.未指定是否在闭包类型中为通过引用捕获的实体声明了其他未命名的非静态数据成员.

this通过参考捕获.但现在§5.1.2/ 17指出:

[...]如果this被捕获,则每个odr-use this转换为对闭包类型的相应未命名数据成员的访问,[...]

据我所知,这意味着闭包类型中必须有一个与this指针对应的未命名数据成员.但由于this通过引用捕获的,因此标准不要求存在这样的成员.我有什么问题?

c++ lambda this c++11

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

各向异性缩放d3版本4

如何在D3版本4中为x轴和y轴提供单独的缩放比例?

帕特里克·布罗克曼(Patrick Brockman)的这个例子给出了一种在v3下非常有效的方法,它允许将缩放比例缩放到比例因子对象.相关代码:

  xyzoom = d3.behavior.zoom()
    .x(xscale)
    .y(yscale)
    .on("zoom", zoomable ? draw : null);
  xzoom = d3.behavior.zoom()
    .x(xscale)
    .on("zoom", zoomable ? draw : null);
  yzoom = d3.behavior.zoom()
    .y(yscale)
    .on("zoom", zoomable ? draw : null);
Run Code Online (Sandbox Code Playgroud)

请注意,有两个缩放对象,每个轴对应一个,并且它们从轴标签/刻度区域和主绘图绑定,因此平移/缩放活动在所有三个区域中累积.

在新的范例中,有一个缩放变换对象与页面元素相关联,其中进行缩放,具有单个缩放因子和二维偏移.对影响缩放对象的支持会转换变换,而无需就地更新它.在所有三个区域之间共享缩放变换将仅给出一个缩放因子(更不用说放大轴标签/刻度区域仍然会影响另一个轴的问题),并且允许每个都有自己的缩放变换会产生可怕的应用顺序的问题(变换乘法不是可交换的).

甚至似乎没有一种简单的方法来获取单个步骤的变换并自己组合它们(尝试将缩放变换重置为标识会引发与用户操作相同的所有事件).

如何在版本4中实现各向异性缩放(不同方向的不同拉伸因子)?

这是我到目前为止所做的,这是完全错误的(它累积了缩放变换的效果,它本身就是缩放事件的累积):

function zoom_update() {
  svg.select('rect.zoom.x.box').call(d3.zoom().on('zoom', function() {
              xscale = d3.event.transform.rescaleX(xscale);
              update();
         }));
  svg.select('rect.zoom.y.box').call(d3.zoom().on('zoom', function() {
              yscale = d3.event.transform.rescaleY(yscale);
              update();
         }));
  svg.select('rect.zoom.xy.box').call(d3.zoom().on('zoom', function() {
              xscale = d3.event.transform.rescaleX(xscale);
              yscale = d3.event.transform.rescaleY(yscale);
              update();
         }));
Run Code Online (Sandbox Code Playgroud)

是否有必要跳过zoom模块并直接处理鼠标事件?

zoom d3.js d3.js-v4

6
推荐指数
1
解决办法
561
查看次数

用于 64 位 Windows 的 G++

在哪里可以获得适用于我的 64 位 Windows 7 机器的 GCC/G++ 编译器?

windows 64-bit win64 g++

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

特定模板特化的重载成员函数

我有一个类tPoint,可以实现具有不同的基类型

template<typename T>class tPoint{
   T x;
   T y;
public:
   void Set(T ix, T iy){x=ix;y=iy;}
};
Run Code Online (Sandbox Code Playgroud)

当类型T是int时tPoint<int>,我想要一个特殊的Set(float,float),所以我可以在赋值之前舍入值.

我认为,通过专业化,我可以:

template<> void tPoint<int>::Set(float ix,float iy){x=ix+.5; y=iy+.5;}
Run Code Online (Sandbox Code Playgroud)

这样编译器就会抱怨类定义中没有匹配的函数.

但是如果我在类Set(float,float)中声明它然后它已经定义了(当它为T = float编译时)

我希望我明确表示,对此采取干净的做法或者我做错了什么?谢谢!

c++ templates specialization

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

没有调用终结器

我在C#中有一个类,我想在我的课程处理时正确地关闭一些通信端口.但是,退出程序时永远不会调用终结器.这是为什么?难道我做错了什么?

我正在手动调用dispose,它会通过并关闭所有通信.这也没有解雇.

这是我正在使用的终结器:

~Power()
{
    Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)

c# finalizer

5
推荐指数
3
解决办法
4936
查看次数

在 C++ 中创建 setter 函数的最佳方法

我想编写一个通过移动或复制接收参数的模板函数。我使用的最有效的方法是:

void setA(A a)
{
   m_a = std::move(a);
}
Run Code Online (Sandbox Code Playgroud)

在这里,当我们使用的是

A a;
setA(a);            // <<---- one copy ctor & one move ctor
setA(std::move(a)); // <<---- two move ctors
Run Code Online (Sandbox Code Playgroud)

我最近发现以这种方式定义它,有两个功能:

void setA(A&& a)
{
   m_a = std::move(a);
}
void setA(const A& a)
{
   m_a = a;  // of course we can so "m_a = std::move(a);" too, since it will do nothing
}
Run Code Online (Sandbox Code Playgroud)

会省很多!

A a;
setA(a);            // <<---- one copy ctor
setA(std::move(a)); // <<---- one move ctor
Run Code Online (Sandbox Code Playgroud)

这很棒!对于一个参数...创建具有 10 个参数的函数的最佳方法是什么?!

void …
Run Code Online (Sandbox Code Playgroud)

c++ performance c++11 c++17

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