InterlockedBitTestAndReset64()未定义

时间:2012-10-08 07:34:53

标签: c visual-studio-2010 visual-c++

我需要在我的项目中使用InterlockedBitTestAndReset64(),但似乎没有定义。我查看了WinNT.h,但由于以下预处理器语句,定义显示为灰色:

" #if defined(_M_AMD64)&& !定义(RC_INVOKED)&& !定义(MIDL_PASS)"

" #if defined(_M_IA64)&& !定义(RC_INVOKED)&& !定义(MIDL_PASS)"

我不知道这是什么意思。

我的项目属性中是否需要设置任何开关?

我使用的是Windows7 x64,而且我使用的是Visual Studio 2010 Professional。 我的CPU是Intel Core2 Quad Q9450。

编辑:PS。我应该提到其他64位函数,如InterlockedAnd64和InterlockedOr64 工作良好。 InterlockedBitAndTestSet64,InterlockedBitTestAndReset64似乎是例外。

谢谢, 卡尔

3 个答案:

答案 0 :(得分:4)

定位x64平台时会定义_M_AMD64宏。定位Itanium时会定义_M_IA64宏。两者都是64位处理器。在32位处理器上不支持这种原子操作。您当然可以使用您拥有的处理器和操作系统来定位x64。

答案 1 :(得分:0)

听起来像正在为x64目标进行编译,所有* 64功能仅适用于x64目标。

答案 2 :(得分:0)

我设法通过使用InterlockedOr64和常规AND运算符来解决问题,我认为结果很好。

实施例: 而不是InterlockedBitTestAndSet64(...):

LONGLONG pattern = 0x0000000000001000;
bool result = InterlockedOr64(ptrToLonglong, pattern) & pattern;

而不是InterlockedBitTestAndReset64(...):

LONGLONG pattern = 0x0000000000001000;
bool result = InterlockedAnd64(ptrToLonglong, ~pattern) & pattern;