设为首页收藏本站
授权版本:2024_07
开启左侧

[C#] 显示在线时间,出现bug,-4294941秒,什么问题啊

[复制链接]
小红居 发表于 2023-9-26 14:40:28 | 显示全部楼层 |阅读模式
  1. XmlDocument xDoc = new XmlDocument();
  2. long userTime = 0;
  3. try
  4. {
  5.     xDoc.Load("./xml/system.xml");
  6.     XmlNode hw = xDoc.FirstChild.SelectSingleNode("用户掉线时间");
  7.     userTime = Convert.ToUInt16(hw.SelectSingleNode("uTime").InnerText);
  8. }
  9. catch
  10. {
  11.     userTime = 300;
  12. }
  13. long time = GetLastInputTime() / 1000;

  14. this.toolStripStatusLabel6.Text = string.Format("用户无操作{0}秒", time);
  15. if (time >= userTime)
  16. {
  17.     if (UserManager.CurrentUser.UserLevel > NewScan.UserLevel.生产线)
  18.     {
  19.         UserManager.UserLogout();
  20.         timerUserScan.Stop();
  21.         Thread.Sleep(50);
  22.         hooktime.Restart();
  23.     }
  24. }
复制代码


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-9-26 15:11:41 | 显示全部楼层
这种问题仔细检查你的时间是否是有符号类型的处理,换成无符号的整数试试。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 小红居 发表于 2023-9-26 15:39:51 | 显示全部楼层
Criss 发表于 2023-9-26 15:11
这种问题仔细检查你的时间是否是有符号类型的处理,换成无符号的整数试试。 ...

Environment.TickCount - (long)vLastInputInfo.dwTime;用了TickCount ,那这个我怎么改尼
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-9-26 16:30:40 | 显示全部楼层
小红居 发表于 2023-9-26 15:39
Environment.TickCount - (long)vLastInputInfo.dwTime;用了TickCount ,那这个我怎么改尼

有没有可能是你的逻辑问题呢?
正常情况下在线时间是当前-之前记录的时间戳肯定是大于0的,一般记录的是时间戳(从1970/1/1 0:0:0开始的总秒数),C#里面的TickCount是微秒,要/1000的换算成毫秒的。
在线时间戳:http://shijianchuo.wiicha.com/

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
18861175562 发表于 2023-9-27 11:13:40 | 显示全部楼层
userTime = Convert.ToUInt16(hw.SelectSingleNode("uTime").InnerText);  
用long  uint16 太小了最大才65535
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表