【问题标题】:Display permanently current time in tcl在 tcl 中永久显示当前时间
【发布时间】:2022-09-24 01:22:42
【问题描述】:

我有三个问题,它们都彼此密切相关。最重要的是第一个。

首先:我试图以小时:分钟:秒的格式显示当前时间,所以

set systemTime [clock seconds]

puts \"The time is: [clock format $systemTime -format %H:%M:%S]\"

但是上面的时钟应该是永久更新的,即时钟的秒部分应该一直在运行。

第二:在下一步中,我想显示毫秒,它们也应该更新。

第三:我想在某个时间点执行一个程序。更准确地说:在某个时间,比如 16:20(这里的格式是小时:分钟),tcl 必须执行一个过程,比如我定义的 proc SumUpInt。在执行 proc 时,我可能还想考虑秒和毫秒。

我不知道该怎么做。我在一些网站上发现了许多类似的问题,还有关于堆栈溢出的问题,但我无法使其中一些解决方案适应我的问题。

欢迎任何帮助!

先感谢您。

  • “我正在尝试显示当前时间”——在哪里?在 GUI 中,在您的终端中?你的用户界面是什么?
  • \"显示毫秒,它们也应该更新\" -- 多久更新一次?每秒,十分之一秒,毫秒?
  • 对不起,我应该在这些方面更准确。所以,首先我想在我的终端上显示时钟。毫秒必须每毫秒更新一次。
  • 你的终端在哪里?当它显示时间(某处)时,您仍然可以正常交互,输入命令等?你需要非常清楚你的场景
  • 确切地。我仍然可以互动。

标签: tcl


【解决方案1】:

clock format 中似乎没有输出指令持续毫秒,所以也许:

proc timestamp {} {
    set t [clock milliseconds]
    set systemTime [expr {int($t / 1000)}]
    set milliSeconds [expr {$t % 1000}]
    return [format "%s.%03d" [clock format $systemTime -format %T] $milliSeconds]
}

timestamp      ;# => 14:41:13.032

你可以用这个“实时”

proc run_timestamp {} {
    puts -nonewline "\r[timestamp] "
    flush stdout
    after 100 run_timestamp
}
run_timestamp
vwait forever

但是vwait 意味着这将阻塞 Tcl 解释器。我现在对如何将其集成到您的终端没有任何想法。

【讨论】:

  • 谢谢!您的代码有效!它以所需的格式显示时间。但是一旦我执行了你的代码,时钟就不会运行。它仍然显示相同的时间而不更新它。毫秒应该永久更新(每毫秒)。如果您使用时间格式 hours:minutes:seconds,那么秒数应该每秒更新一次。因此,在每个时间点,时钟都应显示正确的时间。
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2012-11-28
  • 2020-06-21
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
相关资源
最近更新 更多