我需要通过Rust程序中的posix filedescriptor读取外部进程提供的数据.fd连接保持很长时间(小时),另一方不时将数据传递给我.所以我需要不断地读取和处理数据流.
为此,我编写了一个循环,调用libc::read()(实际上是readv)来读取数据并在收到数据时对其进行处理.由于这会阻塞整个调度程序,因此我在新的调度程序(readv)上生成一个任务.只要它运行,这样就可以正常工作,但我找不到一种干净地关闭循环的方法.
由于循环在大多数时间都是阻塞的,所以我不能使用port/chan来通知循环退出.
我尝试通过使用失败的链接任务将其删除来杀死循环任务(生成监督的循环任务,在其中生成链接任务并等待端口上的信号发生,然后task::spawn_sched(SingleThreaded)用它来取消循环任务) .它在测试中运行良好,但fail!()不会中断(任务在读取完成之前不会失败,并且会libc::read()在某个时间点击.
我学到了很多关于libcore来源的知识,但我似乎找不到合适的解决方案.
task::yield()在Rust中似乎没有类似的东西吗?mozilla/rust/pull/11410,另请参阅我关于 rust-zmq 的其他问题报告,erickt/rust-zmq/issues/24该报告也取决于此。(抱歉链接问题)| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |