在Smalltalk中读取一个超时的文件流(命名管道)



我也把它发布到了吱吱初学者列表中——我一定会确保那里的任何答案都能在这里得到:)

我正在使用Squeak 4.2,并处理命名管道连接的smalltalk端,它向命名管道服务器发送一条消息,其中包含:

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

然后,它应该会收到一个确认,这将是接收到的消息的32字节md5哈希(smalltalk应用程序可以验证)。命名管道服务器可能已经离开,或者无法处理请求,所以我想在读取确认时设置一个超时。我试过使用这个:

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

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

有没有一种方法可以实现这一点,即使使用阻塞的FileStream读取?如果可能的话,我宁愿在有32个字符可用的情况下避免繁忙的等待。

这个可能会派上用场,但恐怕在Windows上不会。

http://www.samadhiweb.com/blog/2013.07.27.unixdomainsockets.html

相关内容

  • 没有找到相关文章

最新更新