私はシリアルI/Oが接続されたUSBデバイスで仮想COMポート経由で行われるアプリケーションを持っています。デバイスの突然の取り外しが検出されたら、シリアルI/Oを停止する最良の方法は何でしょうか。私は単にポートを閉めるべきですか?または、デバイスの存在を示すために保持されているグローバル変数がある場合は、データの送受信を試みる前に各シリアルI/O関数でチェックする必要がありますか?それとも、2つの組み合わせか、それとも別のものか?ありがとう。USBデバイスが取り外されたときにシリアルI/Oをプログラム的に中断する - C++
0
A
答えて
1
私はあなたがWindowsを実行していると仮定しています。 これは、通信フローの設計方法によって異なります。
私は、私がCOMPortオブジェクト(および他の多くの通信オブジェクト)を派生したBasePortオブジェクトを持っています。 COMPortオブジェクトは、1つのTXThreadクラスとRXThreadクラスを作成します。これらのスレッドは、 "OVERLAP"が読み取りまたは書き込み操作がWaitForMultipleObjects()
で終了したことを通知するのを待機しています。
TXThreadsは、TXWrite関数(メインプロセスとスレッド間のデータがトランセッシュセーフFIFOバッファを通過する)によって何も起こさずにスリープ状態になるとスリープ状態になります。
この場合、ポートが閉じたイベント信号を待つ必要があるため、実際には保留中の操作を取り消して終了できます(トレッドは終了して削除されます)。
USBポートがconnectd/disconnetedであるかどうかを検出するには、WindowsのメッセージDEVICE_CHANGE
を待ち受けます。ポートが切断されている場合、私はイベントを設定し、ポートクラスを削除して閉じる前にスレッドが終了するのを待ちます。
このアプローチは非常に信頼性が高く安全です。それは私が8年以上前に設計した通信プラットフォームの中核であり、まだ蹴っています。
関連する問題
- 1. USBデバイスがAndroidで取り外されたときの検出
- 2. C++例外がスローされたときにデバッガのプログラムを中断します。
- 3. リブートせずにUbuntuとC/C++でUSBデバイスを取り外す方法
- 4. REPL ILoopをプログラム的に中断する
- 5. USBデバイスをプログラムで接続して切断する
- 6. アクティビティの切り替え中にBLEデバイスが切断される
- 7. キーボードの各キーを押すたびにUSBデバイスが切断されます
- 8. バーチャルマシンでUSBデバイスをプログラムで接続および切断する
- 9. C++ windowsはUSBシリアルでUSBポートとハブを取得します
- 10. 新しいusbデバイスがQtに接続/切断されました
- 11. Ctrl-Cを使用してプログラムが中断されたときに、動的に領域を解放する方法はありますか?
- 12. C++ - リンクされたリスト - 私が使用するときにプログラムの中断 - >印刷機能で
- 13. ユーザーがホームボタンを押したときに中断されたメソッド?
- 14. Powershell - 外部プログラムの実行中にスクリプトを中断する
- 15. window.locationが変更されたときに中断しますか?
- 16. USBデバイスが接続されているときにユーザーからの入力を受け取ります
- 17. データがキャプチャされたときにusbポートスニッフィングとUSBポートトリガ
- 18. 物理的に切断されているUSBシリアルアダプタの検出
- 19. iOSデバイスがピックアップされたときにコールバックを取得する
- 20. 接続されたUSBデバイスのデバイスパスを取得する
- 21. シェルスクリプトが中断されたときにコマンドを起動する方法は?
- 22. ファイルのコピー中にペンドライブが取り外されました
- 23. 「GNET」プロトコルを使用したUSBデバイスとのシリアル通信
- 24. __FILE__ == $ 0プログラムの前に配置されているときにプログラムを中断する
- 25. ブランチIOを取得する方法は、渡されたパラメータと値をアンドロイドでプログラム的に
- 26. ドアセンサーが取り外されたときにアラームをオフにするには?
- 27. javax.comm:デバイスが切断されたときのエラー
- 28. デバイスでWi-Fiネットワークが切断されたときの監視
- 29. アンドロイドで外部USBデバイスに保存されているデータを取り出す方法は?
- 30. 「例外がスローされたときに中断する」を変更する方法
私はこれが動作していると思います。ありがとう。 –