[英]Read a filestream (named pipe) with a timeout in Smalltalk
我也將它發布到了Squeak Beginners列表中 - 我一定會確保從那里得到任何答案:)
我正在使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.