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

时间:2013-01-28 13:33:38

标签: tcl

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

1 个答案:

答案 0 :(得分:3)

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

输入用尽的标志是[fblocked $channel]的真实值。这就是使用gets和不完整输入行的用例的原因:即使通道技术上可读,只是不可获取,事件也不会再次开火直到新数据到来。