tcl - 读取事件处理程序中的所有输入?

标签 tcl

可读文件事件是由 channel 变得可读触发的,还是由 channel 变得可读触发的?在文件事件处理程序中,我是否必须读取所有可用输入才能在将来触发新事件?或者我可以只读取 1 个字符并返回,如果有更多输入,我的处理程序将自动再次直接调用?或者不直接,而是放在事件队列的末尾,因此这将是首选方法(可能不仅仅是 1 个字符,而是例如 1 行)以防止一个流阻塞整个程序?

最佳答案

它是由可读的 channel 触发的,因此您只能读取输入的一部分(或者偶尔不读取任何内容,以确保将再次调用处理程序)。但是,读取所有可用输入对于性能来说更好(不一定是所有可用字节:如果逐行读取,请执行 gets 直到它针对 fblocked 条件返回 -1)。

输入耗尽的标志是[fblocked $channel]的真实值。这就是为什么使用 gets 和不完整的输入行的用例是可能的:即使 channel 在技术上可读,但不是可获取,事件在新数据到达之前不会再次触发。

关于tcl - 读取事件处理程序中的所有输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563192/

相关文章:

c++ - Tcl_Format 内存使用

tcl - 将秒转换为时分秒格式

regex - 需要有关 TCL 中正则表达式的帮助

C++ 单例类与命名空间与公共(public)静态变量

bash - 如何在期望中转义方括号?

c++ - 使用 SWIG 为 tcl 转换的代码的段错误

encoding - (Tcl) 我应该使用什么字符编码集?

linux - Tcl/Tk - 如何在 OK 运行模拟时点击 OK 按钮使窗口消失

linux - 期望 ping 脚本跳过发送步骤

tcl - 如何使用 tcl udp 包发送有效负载