我想做
InterLockedIncrement(counter, step)
但是编译器说
参数太多
是否有用于获取第二个参数的API?
答案 0 :(得分:7)
InterlockedIncrement()
只有一个参数 - 要增加1的变量:
function InterlockedIncrement(var Addend: Integer): Integer; stdcall;
将指定的32位变量的值增加(增加1)作为原子操作。
参数
加入[in,out]
指向要递增的变量的指针。
根据您的要求,有一个InterlockedAdd()
函数,但它在Delphi中不可用。您可以改为使用InterlockedExchangeAdd()
功能:
function InterlockedExchangeAdd(var Addend: Integer; Value: Integer): Integer stdcall;
执行两个32位值的原子添加。
参数
加入[in,out]
指向变量的指针。该变量的值将替换为操作的结果。价值[in]
要添加到Addend参数指向的变量的值。
答案 1 :(得分:6)
您要查找的Windows功能名为InterlockedAdd
。但我不相信Delphi的RTL提供了这个功能,可能是因为它实际上是作为MS工具链内在的编译器实现的。
还有TInterlocked.Add
可满足您的需求。
但我认为最好的选择是内在函数AtomicIncrement
。这样称呼:
AtomicIncrement(SomeVar, SomeAddend);
内在的优点是: