我有一个带有多个I/O接口的系统,我正在将所有这些接口的输出收集到一个公共日志中.其中两个接口是通过行为良好的通道打开的,这些通道作为类文件对象打开,并且可以在事件基础上使用"fileevent readable"进行管理.另外两个是问题.
这些是供应商提供的库,其他人已经将其包含在Tcl包中(snoopy,FWIW).但是,唯一的读取访问是阻塞调用,并且程序包中没有任何内容会导致事件等同于fileevent.
我已经弄清楚如何生成一个单独的线程来阻止读取,拉出结果,并将其放入主线程的消息队列中.但是在读取队列时使用主线程块似乎会破坏目的,特别是因为它必须阻塞两个队列.而且我无法让读者生成一个可以触发主线程来读取队列的事件.
到目前为止,我已经查看了tcl.tk wiki无济于事.我已经尝试使用uevent库在消息推送上生成一个事件,但事件转到写入线程而不是读取线程,这实际上没有帮助.似乎应该有一些与Thread条件变量相关的解决方案,但到目前为止,我还没有找到适合该库使用的设计模式.
如果所有其他方法都失败了,我将回到Tk事件,但我试图让Tk脱离这个,因为它意味着是一个没有GUI的自动化系统,任何提及Tk都会将tclsh推入愿望并弹出一个GUI窗口.
我觉得我很亲密,但只是缺少一些东西.