【发布时间】:2010-08-16 06:19:52
【问题描述】:
我有一个自己的 GetTickCount() 函数返回一个无符号整数(计数在 0xFFFFFFFF 上翻转为零)
我无法测量经过的时间:
unsigned int elapsed;
unsigned int start = GetTickCount();
LongOperation();
unsigned int stop = GetTickCount();
if (stop >= start )
elapsed = stop - start;
else
elapsed = (INT_MAX - start) + stop;
如果我对有符号进行强制转换,这是否相同(我测量的时间跨度总是小于可以用有符号整数表示的时间 - 我认为大约 24 天)? :
int start = (int)GetTickCount();
LongOperation();
int elapsedTime = (int)GetTickCount() - start;
如果我查看 .net Environmet.TickCount 属性:
TickCount 将从零递增到 Int32..::.MaxValue 大约 24.9 天,然后跳转到 Int32..::.MinValue,这是一个负数,然后在接下来的 24.9 期间递增回零天。
所以当我将 GetTickCount() 函数转换为有符号整数时,我应该从 .net 获得行为(包装发生在 0x7FFFFFFF->0x80000000)?
这样应该可以测量经过的时间如下(见另一篇文章):
int start = Environment.TickCount;
DoLongRunningOperation();
int elapsedTime = Environment.TickCount - start;
【问题讨论】:
-
没有。经过的时间可能适合整数,但将“开始”和“结束”类型转换为有符号整数可能会给出错误的值。
标签: c++