Windows 8 マシンで開発した Tcl/Tk アプリがあります。アプリは、FTDI USB Windows ドライバーと tclftd2xx Tcl 拡張機能を使用して、USB デバイスを開きます。
テストの一環として、アプリを Windows 7 マシンにインストールしました。tcl を終了しようとするまで、アプリは正常に動作します。exit コマンドが実行されると、アプリがハングします。
Tkに関係あると思っていたのですが、そうではありません。Tcl コードは非常に単純です (loc 22 は単なる例です)。
package require ftd2xx
set handle [ftd2xx open -location 22]
exit
これは「良い」ハングではありません。プログラム KILL でさえシャットダウンしません。これを回避する唯一の方法は、マシンをハード リセットすることです。これは、ウィンドウがアクティブなプロセスで「安全な」シャットダウンを実行しないためです。
ftd2xx リセットを呼び出すと、tcl が待機しているものはすべてクリアされ、終了が完了することがわかりました。
次のように:
package require ftd2xx
set handle [ftd2xx open -location 22]
ftd2xx reset $handle
exit
今私の問題は、ユーザーがアプリを閉じる前に USB デバイスを取り外すと、ファイル ハンドル ($handle) が古くなるため、ftd2xx リセットがハングを解放できず、ハード リブートに戻ることです。
エラーが初期化にあるのか、libftd2xx.c にあるのか、FTDI ドライバーにあるのか、Tcl にあるのかわかりません。libftd2xx.c のすべてを投稿したくありません
誰かがこれについて何らかの洞察を持っているなら、私はフィードバックをいただければ幸いです。