Safe Device デッドロックの回避とマルチスレッド化 【チュートリアル】


前回のSafe Deviceから少し改良を加えました。

スポンサーリンク

Safe Device

何度か説明してきましたがもう一度おさらい。Safe Device(SafeDevice.exe)は、安全にデバイスを取り出すためのサポートアプリケーションです。

USBドライブ内のファイルを使用している時にそれを無理やり抜いてしまうとファイルやファイル構造が壊れてしまう場合があります。ただし、どのファイルがどのアプリケーションで使用されているかを確認する手段が通常ありませんのでそれを提供するのがSafe Deviceの役目です。

今回は、バージョン1.20での問題を解決してみました。1.20での問題は、環境によってはSafeDevice.exeがうまく動作しないというものです。これは、SafeDevice.exeの中で他のアプリケーションを調べている時にハングってしまうというもので、どうやらデットロックに陥っているようでした。

ということで、今回2つの対策(デッドロックの回避とマルチスレッド化)を行いました。デッドロックが発生すると次のようなエラーが表示されます(ここでは、TSVNCache.exeでデッドロック発生しています。)

error.gif

OKを押すと実行ファイルと同じフォルダーにSafeDevice.iniが生成され、SafeDevice.exeが再起動されます。SafeDevice.iniにより、デッドロックが発生したアプリケーションの検出を無効にします。

ini.gif

ということで完全な処置ではありませんが、ひとまず使えるようになるかと。また、マルチスレッド化で動作も軽くなっていると思います。

ダウンロード

最新版は、こちらから
http://soundengine.jp/software/

基本的な使い方は、USBメモリ内のファイルを使用しているアプリケーションを調べるを参照して下さい。「Device Flush」ボタンと「Window Flush」ボタンについては、ハードウェアの安全な取り外し ボリュームとアプリケーションのフラッシュを参照して下さい。

USB機器の安全な取り外しを簡単にするための取り外しボタンも設置しました。ご意見・ご感想などありましたら、フォーラムまで。

プログラミングキーワード

今回は、TerminateThreadでの強制終了とQueueUserAPCによる割り込みを使ってみました。これらを使うことでマルチスレッドかつ敏速なGUIになりました。

スポンサーリンク
カテゴリー: チュートリアル   パーマリンク