使用Smalltalk中的超时读取文件流(命名管道)

 昆仑神奇_325 发布于 2023-02-04 19:26

我也将它发布到了Squeak Beginners列表中 - 我一定会确保从那里得到任何答案:)

我正在使用Squeak 4.2并处理命名管道连接的smalltalk端,该连接使用以下命令向命名管道服务器发送消息:

    msg := 'Here''s Johnny!!!!'. 
    pipe nextPutAll: msg; flush. 

然后它应该收到一个确认,它将是收到的消息的3​​2字节md5哈希值(smalltalk应用程序随后可以验证).命名管道服务器可能已经消失或者无法处理请求,因此我想在读取确认时设置超时.我试过用这个:

    ack := [ pipe next: 32 ] valueWithin: (Duration seconds: 3) onTimeout: [ 'timeout'. ]. 

然后使管道服务器人为地暂停以测试代码.但是smalltalk线程在读取时阻塞并且不进行(即使在超时之后),但是如果我然后让管道服务器发送正确的响应(例如在5秒延迟之后),则为'ack'的值'是'超时'.显然超时完成了它应该做的事情,但无法"解锁"管道上的阻塞读取.

有没有办法实现这一点,即使阻止FileStream读取?如果可能的话,我宁愿避免忙碌等待有32个字符可用.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有