2014-10-16 52 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