でタイムアウトで(名前付きパイプ)FILESTREAMを読む私もSqueakの初心者のリストにこの投稿を - 私は、そこから任意の答えはここに来ることを確認してくださいよ:)Smalltalkの
を私はSqueakのを使用しています4.2で名前付きパイプサーバーにメッセージを送信する名前付きパイプ接続のSmalltalkの端に取り組んで:これは、受信した32バイトのMD5ハッシュとなり肯定応答を受け取るべき
msg := 'Here''s Johnny!!!!'.
pipe nextPutAll: msg; flush.
メッセージ(Smalltalkアプリが確認できる)。名前付きパイプサーバーが去ってしまったり、要求を処理できなかったりする可能性があります。そのため、確認応答の読み取り時にタイムアウトを設定したいと考えています。
ack := [ pipe next: 32 ] valueWithin: (Duration seconds: 3) onTimeout: [ 'timeout'. ].
をして、コードをテストするために人為的にパイプサーバーポーズを作った:私はこれを使ってみました。しかし、私がパイプサーバーに正しい応答(例えば5秒遅れの後に)を送るのが得られたとしても、読み込みのsmalltalkスレッドブロックは(タイムアウト後も)実行されませんが、 'ack 'タイムアウト'です。明らかにタイムアウトは何をすべきかを行いましたが、パイプ上のブロッキング読み出しを「ブロック解除できませんでした」。
ブロックするFileStreamを読み取ってもこれを達成する方法はありますか?可能であれば、32文字が利用可能であることを私はむしろ忙しく待つことを避けたい。
ちょうど情報のために、私は決して満足のいく答えを見つけられませんでした。名前付きパイプを使用していたのは、ソケットサーバーを起動するとファイアウォール警告が表示されるためです。しかし、ソケットサーバーを127.0.0.1(デフォルト0.0.0.0ではなく)にバインドすると、少なくともWindowsプラットフォームで警告が表示されないことがわかりました。ですから、問題は避けてください。 – dsl101