2
我是tcl的新手。我想在tcl中创建一个线程,它应该保持在后台调用自己。如何在tcl中创建线程8.4
#!/usr/bin/env tclsh
set serPort [open "/dev/ttyS0" RDWR]
fconfigure $serPort -mode 115200,n,8,1 -blocking 0
while { 1 } {
set data [gets $chan]
puts $data
}
我想避免使用上述while循环并为while循环内的功能创建可重复的线程。基本上,我将我的PC的COM1连接到设备并从设备获取串行数据。但是如果端口上没有数据,即使使用“eof”命令,它仍然不会出现循环。这就是我想要创建线程的原因。
我打算使用Tcl_CreateThread为,但我不明白如何使用它
感谢您的回复。但是,上面的代码也给我提供了同样的问题,即使串行端口上没有数据,它也不会从事件循环中出来并继续搜索事件。如果我有一些其他事件需要处理,那么在串行端口上没有数据时可能会发生这种情况。总之,上述两个代码都会阻止我的系统,并且不允许执行任何操作。你能明白我在这里说的意思吗?如果是,请帮助我 – user1497818
不,我不明白你的意思。使用事件循环精确地允许您忘记忙于等待数据:当数据可用时,您设置了一个要调用的命令前缀。您可以在任何给定时间在任意数量的频道上安装任意数量的回调。他们不会干涉每一个人。请注意,没有“搜索事件”这样的事情。基本上,当你调用'vwait'时,你的代码将会有效地进入睡眠状态,并且只有在有回调被注册的事件时唤醒,并且回调才会被执行。 – kostix