2014-10-16 53 views
1

progn内部,我必须确保asdf:run-shell-command(需要时间来处理)在下一步之前完成。Lisp中的线程同步

(progn 
    (do-data-for-next-command) 
    (asdf:run-shell-command ...) 
    (do-something-when-previous-command-is-done)) 

请注意,我使用Clozure CL和SBCL。

我想我必须用线程来管理。我在Clozure CL文档中发现了类似make-lock的东西,但我不知道如何使用它。

回答

3

如果您使用最近的ASDF,请使用run-program。它等待完成。

run-program需要一个命令参数,它可以是程序名或路径及其参数的列表,也可以是由shell执行的字符串。它产生命令,等待它返回,验证它是否干净地退出...,并且可选地捕获并处理其输出。它接受许多关键字参数来配置其行为。

+0

由于某种原因'ccl:run-program'不能用于我的参数。 'asdf:run-shell-command'应该使用参数':wait t'(这是默认值)。 问题是我的shell命令在后台启动一个进程。这个过程需要时间来操作(打开数据报套接字的时间)。 无论如何,等待一个真正的解决方案,我通过在run-shell-command之后包含(sleep 10)正确的方法做了一次黑客攻击。 – yannics 2014-10-16 18:53:44