C++-C++ 静态函数中的变量问题
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感觉不是很有把握,试答一下:
这个问题与静态变量什么的无关,更有可能是变量初始化的问题。试着把原代码由:
改为:
也许可以解决问题。
我怀疑是编译器不当的优化了变量初始化过程引起的,可以看看生成的汇编代码验证下。
嗯,已经验证过这种方法不行……那么只能看看汇编代码才能确认原因了。
CRT 的time函数只能精确到秒吧?只隔了1秒取有可能是同一个时间吧(比如 1:00:00.500 到 1:00:01.499,前入后舍就变成一个时间了,存在精度问题)。我觉得可以试试sleep(1005),然后再获取current time。
另外个人认为还是用GetTickCount,然后计算差值比较好吧,Win平台一般都用这个函数track 运行时间之类的数据。return DWORD 类型,基于毫秒的。