【问题标题】:Changing system time causes application to hang LINUX (LUBUNTU) TCL/TK更改系统时间会导致应用程序挂起 LINUX (LUBUNTU) TCL/TK
【发布时间】:2014-09-21 11:21:22
【问题描述】:

我有一个带有 c 桌面应用程序的 tcl/tk,其中一个要求是更改系统时间,在后台有从 c 代码运行的线程,以及来自 tcl 代码的“之后”命令。每当我将时间更改为较早的时间时,系统就会挂起 即:05:50:12 -> 05:45:12 当我及时前进时,我也会有奇怪的行为。我正在运行 lubuntu。我不知道在这种情况下该怎么办,我做了一些测试,似乎在我及时更改后继续等待。

更改我使用的时间:来自 tcl 代码的exec date --set="STRING"

【问题讨论】:

  • 阅读time(7),了解adjtime(3)NTPchrony...
  • 如果你真的、真的知道你在做什么,你可以构建一个自定义的 Tcl 并覆盖时间函数(参见tcl.tk/cgi-bin/tct/tip/233.html)并获得完全控制。只是来回移动系统时间是一个相当繁重的工具。所以是的,当你让你的系统假装时间旅行时,你当然会得到奇怪的行为。

标签: c linux ubuntu time tcl


【解决方案1】:

Tcl 依赖于系统时间(转换为从 Unix 纪元开始的秒数),对于许多事情的正确行为,但最特别是 after 命令中的任何事情,系统时间都非常接近单调地增加。在内部,after 计算一个事件应该发生的绝对时间,并且只有在达到该时间时才触发事件,因此早期触发的事件(可能由于各种操作系统事件而发生)不会造成问题。如果您将系统时间设置得很远,Tcl 将一直等到达到绝对时间,这看起来很像挂起。

只需将您的时钟与 NTP 同步(即打开 ntpd)并停止手动摆弄系统时钟。

【讨论】:

  • ntp 的问题是它必须连接到互联网这个应用程序不会连接到互联网。
  • 你能给出一个摆弄系统时间的理由吗?为什么需要这个?
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 2023-03-06
  • 2020-03-05
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多