0

我在 Windows 7 64 位中使用 Visual Studio 2012。

我需要使用并发数据结构,因为我将使用线程。我发现微软有几个http://msdn.microsoft.com/en-us/library/dd504906.aspx#unordered_map

一般来说,我必须处理

将数据接收到队列中......准备就绪时处理......继续接收数据。

我将使用 microsoft 提供的 concurrent_unordered_map 类来拥有一个存储名为 TouchInfo 的类的 cuncurrent 映射。每个 TouchInfo 对象都有一个唯一的 ID(无符号长整数),这是我用来检索需要更新的对象的 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 来创建 Hash...

完全欢迎对我的设计进行任何输入和更改...

非常欢迎我的问题的答案!

谢谢!

4

1 回答 1

1

concurrent_unordered_map使用std::hash,它具有unsigned long. 它开箱即用就可以正常工作。

默认哈希值试图在大多数用例中达到最佳状态,但无法保证,因为每个人的数据都不同。在疯狂查看哈希函数之前绝对要对其进行基准测试(有很多,你可能会浪费很多时间)。

于 2012-11-28T23:17:22.357 回答