簡體   English   中英

使用Smalltalk中的超時讀取文件流(命名管道)

[英]Read a filestream (named pipe) with a timeout in Smalltalk

我也將它發布到了Squeak Beginners列表中 - 我一定會確保從那里得到任何答案:)

我正在使用Squeak 4.2並處理命名管道連接的smalltalk端,該連接使用以下命令向命名管道服務器發送消息:

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

然后它應該收到一個確認,它將是收到的消息的3​​2字節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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM