我正在一个与 Tcl 解释器无关的 C 线程(我正在使用 pthreads)中做一些工作。它拥有指向现有 Tcl 线程的 ThreadId 和 TclInterp 的指针,并希望向该 Tcl 线程发送脚本以进行异步评估。
我可以使用XThreadUtil同步执行此操作,并且仅当我阻塞 Tcl 线程直到 C 线程完成执行时。我真的需要异步行为。也就是说,所需的事件序列是:
我尝试过使用 Tcl 线程通知 API (Tcl_ThreadQueueEvent/Tcl_ThreadAlert) 和异步 API (Tcl_AsnycCreate/Tcl_AsyncMark),但运气不佳。我一直没能找到太多的例子。任何帮助深表感谢。
F# 中三引号字符串中的换行符在 Windows(以及 Linux)上似乎被转换为 LF,而不是 CRLF。然而,Environment.NewLine在 Windows 上是 CRLF。
在 Windows 上:
let tripleQuotedString = """1
2
3"""
let concatenatedString = "1" + Environment.NewLine + "2" + Environment.NewLine + "3";;
printfn "%A" (Seq.toList tripleQuotedString) // yields ['1'; '\010'; '2'; '\010'; '3']
printfn "%A" (Seq.toList concatenatedString ) // yields ['1'; '\013'; '\010'; '2'; '\013'; '\010'; '3']
Run Code Online (Sandbox Code Playgroud)
F# 规范中似乎没有提及这一点。这是一个经过深思熟虑的设计决定吗?
我希望从 clojure 生成一个长时间运行的子进程,并通过标准流与这个进程通信。
使用conch库,我可以生成和读取进程,并从out流中读取数据:
(def my-process (sh/proc "my_dumb_process"))
; read 10 lines from my-process's stdout. Will block until 10 lines taken
(take 10 (line-seq (clojure.java.io/reader (:out p))))
Run Code Online (Sandbox Code Playgroud)
我想在我的进程打印到标准输出时调用异步回调——只要标准输出流中有数据可用。
我对 clojure 有点陌生 - 有没有一种惯用的 clojure 方法来做到这一点?我查看了 core.async ,这很好,但我找不到流的非阻塞解决方案。