在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 '是'超时'。 显然,超时做了它应该做的事情,但不能'解锁'管道上的阻塞读取。

即使阻塞的FileStream读取,是否有办法实现这一点? 如果可能的话,我宁愿避免忙着等待32个字符。


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

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

链接地址: http://www.djcxy.com/p/48285.html

上一篇: Read a filestream (named pipe) with a timeout in Smalltalk

下一篇: Example of Named Pipes