2014-01-09 64 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

回答