2014-01-09 69 views
7

超时我张贴这佳乐初学者列表太 - 我一定会确保从那里任何答案,拿到这里:)阅读FILESTREAM(命名管道)与在Smalltalk

我使用佳乐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个字符。

+0

仅供参考,我从来没有找到满意的答案。我使用命名管道的原因是因为启动套接字服务器会引发防火墙警告。但是,我发现将套接字服务器绑定到127.0.0.1(而不是默认的0.0.0.0)并不会触发警告 - 至少在Windows平台上。所以,问题,呃,避免。 – dsl101

回答