我有一个小程序,需要每5分钟执行一次。
现在,我有一个shell脚本来执行这个任务,但是我希望通过在CLI中键入密钥来为用户提供无需额外脚本运行的能力。
最好的方法是什么?
我有一个小程序,需要每5分钟执行一次。
现在,我有一个shell脚本来执行这个任务,但是我希望通过在CLI中键入密钥来为用户提供无需额外脚本运行的能力。
最好的方法是什么?
我假设您需要类似以下的内容(或多或少的伪代码):
import Control.Concurrent (forkIO, threadDelay)
import Data.IORef
import Control.Monad (forever)
main = do
var <- newIORef 5000
forkIO (forever $ process var)
forever $ readInput var
process var = do
doActualProcessing
interval <- readIORef var
_ <- threadDelay interval
readInput var = do
newInterval <- readLn
writeIORef var newInterval
如果你需要将一些更复杂的数据从输入线程传递到处理线程,MVar
或TVar
可能比IORef
更好.
forever
。 - Filip van Hoftprocess
的末尾仅调用例如process var
将使其无限递归(因此循环)。 - Bartek BanachewiczTVar
而不是IORef
的原因是什么?上面的代码中是否存在一些原子性问题? - chiIORef
,但是当然所示的代码没有可能的竞争条件。我会进行编辑。 - Bartek BanachewiczIORef
或TVar
。直接将5000
传递给进程即可。 - Rein Henrichs
while(1) ...
。 - Filip van Hoft./app -e -t 5
,e
键表示无限运行,t
表示时间间隔。 - Filip van Hoft