none
コンボボックスで応答なしになる RRS feed

  • 質問

  • コンボボックスのプルダウンメニューを表示させてカーソルキーの↑カーソルで上に進めて行くとアプリ自体が「応答なし」になります。

    マウスカーソルで選択した場合には正常にリストを選択出来ます。

    再現性は100%あります。これはMFCの不具合ですか?仕様ですか?

    <開発環境>

    CPU:AMD Ryzen5 1600AF

    メモリ:32Gバイト

    ストレージ:nVME256Gバイト(ワークディスク)、SSD-SATA480Gバイト(システムディスク)、HDD1Tバイト(バックアップディスク)

    OS:Windows 10 Home 64ビット 21H1 build 19043.1055

    開発ツール:Visual Studio 2019 Community Ver 16.10.1

    コンパイラ:C++17

    使用ライブラリ:C++、MFC

    ビルド方法:Release x86 MFCスタティックリンク

    キーボード:ELECOM Bluetooth
    2021年6月13日 6:30

すべての返信

  • 新規にMFCアプリ(ダイアログベース)を作成し、コンボボックス(ドロップダウンリスト)を張り付け、リソース上にデータを適当に入れて、x86/SaticLink でビルドして、キー操作を試してみましたが再現できませんでした。

    プルダウンをマウスで行った場合、キーボード(F4キーで通常はオープンする)で開いた場合なども試してみましたが、特に問題なく動作しています。

    再現可能な最低限のコードは提示可能でしょうか?


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2021年6月13日 7:26
  • 新規にMFCアプリ(ダイアログベース)を作成し、コンボボックス(ドロップダウンリスト)を張り付け、リソース上にデータを適当に入れて、x86/SaticLink でビルドして、キー操作を試してみましたが再現できませんでした。

    プルダウンをマウスで行った場合、キーボード(F4キーで通常はオープンする)で開いた場合なども試してみましたが、特に問題なく動作しています。

    再現可能な最低限のコードは提示可能でしょうか?


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    ご返信ありがとうございます。

    改めてコンボボックスのイベント処理を見直した結果、別スレッドで10ms毎にメンバー変数を参照している処理がありました。以前は、この処理はコンボボックスの処理が完了してから実行されていたので上手くいっていたようです。今回はタイミングによっては別スレッドからの参照アクセスとコンボボックス側でのメンバー変数への書き込みがバティングするタイミングがあるのが原因と思われます。もちろんstd::mutex等で排他オブジェクトの制御はしておりますが、タイミングによっては、両者のアクセスがバティングして「応答なし」になる可能性は否定できません。

    スレッド側のメンバー変数のアクセスタイミングを変更する事で改善されるかを検証させていただきます。

    2021年6月14日 1:50
  • とっちゃん様へ

    やはりコンボボックスのイベント処理でメンバーに対して別スレッドからの参照と書き込みがバッティングしていたために

    応答なしになっていたことが分かりました。

    またバッティングの理由も異なる変数なのに、同じ排他ロックオブジェクトで排他処理をしていたのが根源的な原因でした。

    共有変数毎に排他ロックオブジェクトを割り当てることでバッティングは解消致しました。

    ソースを見直すきっかけを頂き大変助かりました。

    本件はクローズとさせていただきます。

    ありがとうございました😊🙇‍♂️

    2021年6月14日 10:59
  • davinciAkiさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    問題が解決したようでなによりです。
    とっちゃんさんから寄せられた投稿はお役に立てば、[回答としてマーク]の設定をお願い致します。
    設定いただくことで、他のユーザーもお役に立つ回答を見つけやすくなります。

    また何かございましたら、遠慮なくMSDNフォーラムをご利用ください。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年6月15日 1:05
    モデレータ