0

Windows 7 64 ビットで Visual Studio 2012 を使用しています。

スレッドを使用するため、並行データ構造を使用する必要があります。Microsoft にはいくつかのhttp://msdn.microsoft.com/en-us/library/dd504906.aspx#unordered_mapがあることがわかりました

一般的に、私は処理する必要があります

キューにデータを受信します....準備ができたら処理します...データを受信し続けます。

マイクロソフトが提供するconcurrent_unordered_mapクラスを使用して、TouchInfoという名前のクラスを格納するcuncurrentマップを作成します。各TouchInfoオブジェクトには、更新が必要なときにオブジェクトを取得するために使用した一意のID(符号なしロング)があります。

同時に、TouchInfo を同時キューに挿入する必要があります...キューが数に達すると、キューを処理します... (別のスレッド)

1. 最初の質問は、unsigned long の特別なハッシュ関数が必要かどうかです... unsigned long は、Windows 7 のマルチタッチ システム (WinUser.h) からシステムによって与えられた ID (dwID) です。 ID を制御できないため、ハッシュ関数が最適化されていることを確認したいと考えています。

typedef struct tagTOUCHINPUT {
    LONG x;
    LONG y;
    HANDLE hSource;
    DWORD dwID;
    DWORD dwFlags;
    DWORD dwMask;
    DWORD dwTime;
    ULONG_PTR dwExtraInfo;
    DWORD cxContact;
    DWORD cyContact;
   } TOUCHINPUT, *PTOUCHINPUT;

たぶん何もしなくていいから宣言するだけ

Boostを使用してハッシュを作成する人がいることをWebで見ました...

私のデザインへの入力や変更は大歓迎です...

私の質問への回答は大歓迎です!

ありがとう!

4

1 に答える 1

1

concurrent_unordered_mapstd::hashのデフォルトの実装を持つ を使用しますunsigned long。箱から出してすぐに問題なく動作します。

デフォルトのハッシュは、ほとんどのユース ケースで最適になるように努めていますが、すべてのユーザーのデータが異なるため、保証はありません。ハッシュ関数に夢中になる前に、必ずベンチマークを行ってください (ハッシュ関数はたくさんあり、多くの時間を無駄にする可能性があります)。

于 2012-11-28T23:17:22.357 に答える