【问题标题】:what's a good way to generate a wake up alarm in tcl什么是在 tcl 中生成唤醒警报的好方法
【发布时间】:2020-09-09 12:02:47
【问题描述】:

假设您有一个需要很长时间才能完成的 TCL 过程,并且您需要在 tcl 过程结束时进行唤醒呼叫,以便您知道何时查看结果。

什么是使用 tcl 代码从深度睡眠中唤醒自己的好方法...比如说你躺在沙发上,锯木头,你需要从你的 tcl 程序中摇晃一下,以便在完成后唤醒你处理?

例子:

tcl_proc_that_takes_hours_to_complete
ring_alarm_bell_to_inform_user_that_proc_is_done

我想过:

proc ring_alarm_bell_to_inform_user_that_proc_is_done {} 
    puts "\a"
}

但不知何故,我认为它还不足以用于此目的......

【问题讨论】:

    标签: tcl


    【解决方案1】:

    这是我的解决方案:

    proc wake_up_beep {} {
        set beep_on_end 1
    
        if {$beep_on_end} {
            puts "WHATEVER YOU WERE DOING IS FINISHED! (ctrl-C to exit)\a"
            while {1} {
                puts -nonewline "\a"
                after 1000
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我很喜欢在任务完成时使用口头通知;人们通常非常善于关注这一点,而不仅仅是一些随机的哔哔声。在 macOS 上,我使用这个:

      proc say {something} {
          # This is a trivial wrapper
          exec say $something
      }
      
      say "All done now"
      

      你有various options for Linux,其中一些从 Tcl 的角度看起来与上面非常相似,还有other options for Windows,所有这些都可以使用exec 调用,例如:

      proc say {something} {
          # This is a not-so trivial wrapper, and should be tested before production use
          exec PowerShell -Command [format {Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('%s');}
      }
      say "All done now"
      

      您也可以使用 Snack 包进行直接播放或合成,但是当您可以使用现有的设施时,这需要更多的工作。

      【讨论】:

      • 使用 Tcom 或 TWAPI 包可能可以访问 Windows 语音合成引擎,但我不知道该怎么做。
      • 真烦人:exec bash -c {while :; do say "wake up $((++i))"; sleep 1; done}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2022-02-16
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多