gpt4 book ai didi

sockets - 原子地写入套接字

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:14 24 4
gpt4 key购买 nike

我正在使用process-send-string 向套接字连接发送数据,但我对这个函数的效果并不满意。粗略地说,调用 (process-send-string "foo") 可能最终会发送 "bar",然后是 "foo",如前所述下面。

正如 Emacs 维护者所指出的,process-send-string 的 C 代码调用了一个函数 wait_reading_process_output(甚至在实际编写任何内容之前),它可能会运行计时器,这反过来可能会调用 process-send-string,并且在此类嵌套调用之间不强制执行任何顺序。

这使得实现旨在由不受控制的时间调用的 Hook 使用的 RPC 协议(protocol)实际上是不可能的。所以我的问题是,我们如何才能为此目的实现一个原子的、“同步的”写入原语?

最佳答案

你可以这样做:

(defun my-send-cmd (proc str)
(if (process-get proc 'my-waiting)
(process-put proc 'my-pending (append (process-get proc 'my-pending) (list str)))
(process-put proc 'my-waiting t)
(process-send-string proc str)))

然后在进程过滤器中,当你得到一个命令的答案时,检查'my-pending',如果不是nil,取第一个arg,将它发送到进程,否则将my-waiting设置回nil .当然,这是假设每个命令都会从服务器得到一个答案,并且您不能流式传输命令。

这就是说,您看到的行为应该算作一个错误,或者至少算作一个错误功能,所以请使用 M-x report-emacs-bug 报告它。

关于sockets - 原子地写入套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com