下記の通り記載して戻り値から参照先の生存確認を行いたいのですが
正常時は特に問題ないものの、相手が無い場合、試験したPCのLANケーブルをDelphi 7です。
抜いてテストした場合かなりの時間フリーズしていまいます。
特にケーブルを抜いた場合はしばらく待った後に0(正常?)が返ってきて困ります。
ret := WNetAddConnection('\\192.168.0.36\data', '', '');
スレッド等にして行うしかないのでしょうか?
WNetAddConnection関数は2と3があるようですがこれらも同じなのでしょうか?
WNet系nAPIはタイムアウトの指定とか無理みたいなんで。
Indyかなんか使ってping送って生存確認するとかしかないかもですね。
ただ、Windowsファイアウォールのデフォルト設定がpingを無視するだったような気もするのでその辺りの設定がいじれないなら厳しいですね
タイムアウトの件、スレッド等で対処したいと思います。
ただケーブルを抜いてもう生きてないPCを参照しても0になるというのは対処の方法はないのでしょうか?なにかキャッシュのような機能でもあるのでしょうか?
http://support.microsoft.com/kb/412789/ja
これだとかなり早く検知できます。ループにもよりますが
LAN抜けのポップアップと同じくらいの早さで取得できると思います。
ノンブロッキングにして検査すれば、それなりの速度は出るかも知れません。
ごめんなさい。
WNetAddConnection
見てませんでした。直前で判定するのはありかと思います。
ありがとうございます。
教えていただいた方法で試してみます。
これでだめならまた別の方法を調べてみます。
ツイート | ![]() |