14

I am converting some code from C to C++ in MS dev studio under win32. In the old code I was doing some high speed timings using QueryPerformanceCounter() and did a few manipulations on the __int64 values obtained, in particular a minus and a divide. But now under C++ I am forced to use LARGE_INTEGER because that's what QueryPerformanceCounter() returns. But now on the lines where I try and do some simple maths on the values I get an error:

error C2676: binary '-' : 'LARGE_INTEGER' does not define this operator or a conversion to a type acceptable to the predefined operator

I tried to cast the variables to __int64 but then get:

error C2440: 'type cast' : cannot convert from 'LARGE_INTEGER' to '__int64'

How do I resolve this?

Thanks,

4

6 回答 6

30

LARGE_INTEGER 是一个 64 位整数和一对 32 位整数的并集。如果要对其中一个执行 64 位算术,则需要从联合内部选择 64 位 int。

LARGE_INTEGER a = { 0 };
LARGE_INTEGER b = { 0 };

__int64 c = a.QuadPart - b.QuadPart;
于 2009-09-08T18:00:16.300 回答
10

LARGE_INTEGER是一个工会,记录在这里。你可能想要一个QuadPart会员。

于 2009-09-08T17:58:18.910 回答
9

这里是:

LARGE_INTEGER x,y;
///
//Some codes...
///

__int64 diff = x.QuadPart - y.QuadPart

因为QuadPart被定义为LONGLONG,与__int64相同。

于 2009-09-08T18:04:40.143 回答
3

LARGE_INTEGER是一个联合,如果您想处理 64 位值,您仍然可以使用 .QuadPart。

于 2009-09-08T17:58:37.427 回答
1

正如文档备注部分中所说:

LARGE_INTEGER结构实际​​上是一个联合。如果您的编译器具有对 64 位整数的内置支持,请使用 QuadPart 成员来存储 64 位整数。否则,使用 LowPart 和 HighPart 成员来存储 64 位整数。

因此,如果您的编译器支持 64 位整数,请像这样使用 quadPart:

LARGE_INTEGER a, b;
__int64 diff = a.QuadPart - b.QuadPart
于 2016-08-30T16:28:39.097 回答
0

除了答案之外,如果您要构造一个非零值的 LARGE_INTEGER,您可以分别分配低和高部分。LowPart 首先是在联合中定义的,唯一的 highPart 是有符号的。

LARGE_INTEGER li = {0x01234567, -1};
于 2017-02-23T19:03:50.043 回答