C++-C++ 静态函数中的变量问题

发布于 2017-08-03 10:45:26 字数 482 浏览 1253 评论 2

DWORD WINAPI MyTimer::ThreadFunc(LPVOID lpThreadParameter)
{
time_t startTime = time(NULL); // 获取当前开始时间
while(m_bRun)
{
Sleep(1000);
time_t curTime = time(NULL); // 循环中每次睡眠1s,再获取当前时间

// 如果当前时间与开始时间之差大于某个设定值,表示超时
if(difftime(curTime,startTime) >= m_uElapse)
{
m_lpTimerFunc(NULL, 0, 0, 0);
break;
}
}
return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-10-24 08:13:59

感觉不是很有把握,试答一下:

这个问题与静态变量什么的无关,更有可能是变量初始化的问题。试着把原代码由:

time_t startTime = time(NULL);

改为:

time_t startTime = 0;
startTime = time(NULL);

也许可以解决问题。

我怀疑是编译器不当的优化了变量初始化过程引起的,可以看看生成的汇编代码验证下。

嗯,已经验证过这种方法不行……那么只能看看汇编代码才能确认原因了。

偏爱自由 2017-10-04 01:31:14

CRT 的time函数只能精确到秒吧?只隔了1秒取有可能是同一个时间吧(比如 1:00:00.500 到 1:00:01.499,前入后舍就变成一个时间了,存在精度问题)。我觉得可以试试sleep(1005),然后再获取current time。
另外个人认为还是用GetTickCount,然后计算差值比较好吧,Win平台一般都用这个函数track 运行时间之类的数据。return DWORD 类型,基于毫秒的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文