我在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. 我的第一个问题是我是否需要无符号长...无符号长整型是系统从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来创建哈希...
完全欢迎对我的设计进行任何输入和更改...
非常欢迎回答我的问题!
谢谢!
concurrent_unordered_map
使用std::hash
,它具有unsigned long
的默认实现。开箱即用即可正常工作。
默认哈希尝试在大多数用例中达到最佳状态,但无法保证,因为每个人的数据都不同。在疯狂地查看哈希函数之前,一定要对其进行基准测试(有很多,您可能会浪费大量时间)。