タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

最近のネットワークの調整

最近、X-FinderとTablacus Explorerで行ったネットワーク関連の調整はネットワークパスを開こうとした際に間違ったサーバー名だったりして問題がある場合、しばらく「応答なし」になって固まってしまう問題を対策していました。 例えば、X-Finder 11-12でアドレスバーに「\\unknown\hoge」と入力したらしばらく固まってしまっていました。 固まるのは、パスからアイテムIDリストというWindowsの仮想フォルダを扱う物に変換する箇所だと判った時に変換をバックグラウンドスレッドで行って、メインスレッドではメッセージ処理を行いながら変換を待つということもやってみたこともあったのですが、今ひとつ効果がありませんでした。 今回はバックグラウンドスレッドで変換を行ってアイテムIDリストが取得できたら、メインスレッドにその後の処理を投げるといった感じの処理を行ったらよい感じにできました。 詳しくはTablacus Exploerのソースをご覧ください。 static void threadParseDisplayName(void *args)がバックグラウンドの処理で VOID CALLBACK teTimerProcParse(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)がアイテムIDリストを取得した後の処理になります。 Tablacus Explorerではメインスレッドに投げるのにSetTimerを使っていますが、X-FinderではSynchronizeメソッドを使用しています。 今まで、なんでこの方法を思いつかなかったのかと思いながら、他のファイラーをダウンロードしてきてアドレスバーに「\\unknown\hoge」と入力したら、しばらく固まるの物がほとんどだったのでちょっとホッとしてしまいました。 こちらの環境のWindows 7(x64)ではAs/R 3.4.0.92(x64)、CubicExplorer 0.95.1、Explorer++ 1.3.5.531(x64)、NobleBullet 1.4.0(x64)、Q-Dir 5.72(x64)が固まりました。PPx 1.33(x64)は即エラーが表示されて後から詳しいエラーが表示されました。なにげにエクスプローラも固まりません。 それにしても、PPxの即エラーは凄いな。