在编写C++时,我们假设以下代码行:
Object* obj = new Object();
Run Code Online (Sandbox Code Playgroud)
如果这一行既编译并且不会导致异常或任何其他可见的运行时问题,那么在执行此行之后obj是否为NULL?
我正在开发一个函数,它可以获取给定PID的父进程的PID.该功能的原型是
DWORD getParentPid( DWORD pid );
Run Code Online (Sandbox Code Playgroud)
为此,我正在使用CreateToolhelp32Snapshot函数(和相关函数)来获取PROCESSENTRY32给定PID 的结构pid.然后我可以使用th32ParentProcessId结构的字段来获取创建我给定进程的进程的PID.
但是,由于父进程可能已经被破坏(并且它的PID可能已被Windows重用),我正在使用该GetProcessTimes函数来获取假定的父进程和子进程的创建时间,然后比较那些使用的进程CompareFileTime.
如果CompareFileTime返回-1,我知道具有父ID的进程是在我的子进程之前创建的,所以它确实是父进程.否则,它显然是一个重用的ID - 并且父PID无效(它不再引用原始父级).
这个问题是它非常依赖于严格单调的系统时钟和粒度GetProcessTimes.即使正在考虑的过程确实处于亲子关系中,我确实遇到了CompareFileTime返回0(即"平等时间")的案例.我可以更改我的检查,以便将CompareFileTime结果值<= 0视为表示父项,但是我会打破(理论上)父项创建子进程,然后父进程被销毁,然后Windows重新使用PID的情况- 全部在100ns(这是分辨率GetProcessTimes).
我想知道 - 是否有一种不同的,更可靠的机制来验证某些进程确实是C++中另一个进程的父进程?
编辑:我需要这个函数来确定所有子进程(这意味着包括祖子进程).该CreateToolhelp32Snapshot让我遍历所有进程,但我需要看每个人的父PID告诉它是否是我手头过程的孩子.
似乎无法让错误消失.错误如下.我已经看过谷歌仍然无法搞清楚.这不像我是Cpp的新手,但有一段时间没有被它愚弄.
奇怪的是它在Windows中使用G ++ ...
错误:
main.cpp中
#include <iostream>
#include "Help.h"
using namespace std;
int main () {
Help h;
h.sayName();
// ***
// ***
// ***
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Help.h
#ifndef HELP_H
#define HELP_H
class Help {
public:
Help();
~Help();
void sayName();
protected:
private:
}; …Run Code Online (Sandbox Code Playgroud) 我试图使用VC++的try-except语句将一些代码移植到MinGW:
bool success = true;
__try {
//...
} __except ((EXCEPTION_STACK_OVERFLOW == GetExceptionCode())
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH) {
success = false;
_resetstkoflw();
}
return success;
Run Code Online (Sandbox Code Playgroud)
是否可以编写使用MinGW g ++捕获堆栈溢出异常的代码?
我正在尝试实现一个DateListBarChart函数,该函数采用过时数据并输出具有相同位置的条形图DateListPlot.如果给定相同的数据,他们必须将数据绘制在相同的水平位置,因此可以使用它们进行组合Show.我发现很难得到BarSpacing正确的设置,以便绘图的水平范围不会改变,并且条形基本上保持在相同的位置.
我无法推断出正确的比例,因此BarSpacing->{0.2,0.3}可以获得该组条的可用x轴长度的20%与该组中条之间的间距,以及30%作为条组之间的间距.由于技术原因,我通过将事情传递给我RectangleChart.根据文件,BarSpacing被视为绝对单位RectangleChart.显然,如果有更多的系列,间隙的绝对尺寸需要更小,并且条形需要更窄.
一些例子:
arList = FoldList[0.9 #1 + #2 &, 0.01, RandomReal[NormalDistribution[0, 1], 24]]
{0.01, 0.334557, 2.02709, 1.1878, 1.9009, 3.08604, 2.36652, 3.04111,
3.32364, 3.22662, 3.12626, 2.59118, 1.69334, 1.21069, 0.23171,
0.689415, -0.852649, -0.124624, 0.58604, -0.481886, 0.221074,
-0.300329, 2.36137, 0.427789, -1.47747}
dists = RandomChoice[{3, 4}, Length[arList]]
{4, 4, 4, 3, 4, 3, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 4, 4, 3, 4, …Run Code Online (Sandbox Code Playgroud) 我正在寻找解释为什么在这些网站上讨论了2种不同的mercator公式.
我理解这是正确的墨卡托投影算法:
http://en.wikipedia.org/wiki/Mercator_projection
y = ln|sec(lat) + tan(lat)|
Run Code Online (Sandbox Code Playgroud)
但是,这个网站指的是完全不同的东西:http: //wiki.openstreetmap.org/wiki/Mercator
#include <math.h>
double lat2y(double a) { return 180/M_PI * log(tan(M_PI/4+a*(M_PI/180)/2)); }
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
因为似乎没有ADC的固有内容而且我不能使用Visual C++的x64架构使用内联汇编程序,如果我想使用add with carry编写函数但是将它包含在C++命名空间中,我该怎么办?
(使用比较运算符进行仿真不是一种选择.这256兆位的添加对性能至关重要.)
我创建了一堆插入脚本,以便将新用户添加到aspnet_Membership和aspnet_User表中.我不能认证,说它找不到我的用户.
有没有人试图通过T-SQL插入创建新的成员资格用户?我必须这样做,因为我们在C#/ ASP.NET中创建用户代码目前不起作用.
我创建了一个时间函数来计算媒体播放的时间.它不显示任何前导零.如何让它显示任何前导零?
function converttoTime(timeInSeconds)
{
var minutes = Math.round(Math.floor(timeInSeconds / 60));
var seconds = Math.round(timeInSeconds - minutes * 60);
//var hours = Math.round(Math.floor(timeInSeconds / 3600));
//time = time - hours * 3600;
var time=minutes+':'+seconds;
return time;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含许多函数指针的类,我想在构造对象时将它们全部初始化为NULL.为此,我计划在内存位置上使用memset,从第一个指针指向最后一个指针,但是我不确定这是否会在100%的时间内起作用.
如果这些函数指针在类中连续声明它们的内存位置也是连续的,那么它是否可以保证.我假设填充不会影响我正在尝试做的事情,因为任何填充字节也只会设置为NULL.
示例类实现
class C
{
private:
void (*func1)();
void (*func2)();
void (*func3)();
void (*func4)();
};
Run Code Online (Sandbox Code Playgroud) c++ ×6
visual-c++ ×2
64-bit ×1
asp.net ×1
bar-chart ×1
c ×1
datetime ×1
g++ ×1
intrinsics ×1
javascript ×1
math ×1
mercator ×1
mingw ×1
null ×1
plot ×1
t-sql ×1
time ×1
try-except ×1
winapi ×1
windows ×1