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

标签 timeout named-pipes smalltalk blocking squeak

我也将其发布到 Squeak 初学者列表中 - 我一定会确保从那里得到的任何答案都到达这里:)

我正在使用 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

关于timeout - 在 Smalltalk 中读取超时的文件流(命名管道),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024242/

相关文章:

timeout - Sonar 3.6.1 无法请求 :/batch_bootstrap/properties

android - 什么是平均。移动应用程序的最佳连接超时?

javascript - 搜索栏以在 React 中过滤表结果并超时

smalltalk - Squeak/Pharo Trait 和 Newpeak Mixin 有什么区别?

smalltalk - 如何在 Pharo 中采样概率分布

string - 在 Smalltalk VisualWorks 7.9.1 中将 Open Sound Control ByteArray 转换为 String

search - 如何延迟 AngularJS 即时搜索?

sql-server - 提供商 : Named Pipes Provider, 错误 : 40 – could not open a connection to SQL server.

c++ - 在没有阻塞的情况下在没有数据的管道上打开 ifstream

c - Linux 上由两个命名管道 (FIFO) 循环链接的两个过滤器