小编Dab*_*abo的帖子

如何从非 tcl 线程异步调用 Tcl 线程中的命令?

我正在一个与 Tcl 解释器无关的 C 线程(我正在使用 pthreads)中做一些工作。它拥有指向现有 Tcl 线程的 ThreadId 和 TclInterp 的指针,并希望向该 Tcl 线程发送脚本以进行异步评估。

我可以使用XThreadUtil同步执行此操作,并且仅当我阻塞 Tcl 线程直到 C 线程完成执行时。我真的需要异步行为。也就是说,所需的事件序列是:

  1. tcl 线程调用生成 C 线程并立即返回的命令;
  2. tcl线程事件循环恢复,C线程并发工作;
  3. 当 C 线程完成工作时,它向 tcl 线程的事件队列发送一个事件并退出;
  4. tcl 线程在准备好时处理事件。

我尝试过使用 Tcl 线程通知 API (Tcl_ThreadQueueEvent/Tcl_ThreadAlert) 和异步 API (Tcl_AsnycCreate/Tcl_AsyncMark),但运气不佳。我一直没能找到太多的例子。任何帮助深表感谢。

multithreading asynchronous tcl

4
推荐指数
1
解决办法
374
查看次数

为什么 F# 中三引号字符串中的换行符与 Environment.NewLine 不同?

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# 规范中似乎没有提及这一点。这是一个经过深思熟虑的设计决定吗?

f#

3
推荐指数
1
解决办法
142
查看次数

如何从clojure中的子进程执行非阻塞读取标准输出?

我希望从 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 ,这很好,但我找不到流的非阻塞解决方案。

multithreading asynchronous ipc process clojure

2
推荐指数
1
解决办法
954
查看次数

标签 统计

asynchronous ×2

multithreading ×2

clojure ×1

f# ×1

ipc ×1

process ×1

tcl ×1