我有一个双重值,我需要在backgroundThread中访问。我想使用像> cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --p
rogress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js
'cross-env' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\
node_modules\\npm\\bin\\npm-cli.js" "run" "watch"
npm ERR! node v6.11.4
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! @ watch: `cross-env NODE_ENV=development node_modules/webpack/bin/webpa
ck.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/
webpack.config.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ watch script 'cross-env NODE_ENV=development node_modul
es/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_module
s/laravel-mix/setup/webpack.config.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js
--watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpac
k.config.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls
npm ERR! There is likely additional logging output above.
这样的一些思考但是缝不能用于双重。他们的任何其他等价物,我可以使用双?我想避免使用AtomiccmpExchange
/ Tmonitor.enter
因为我需要尽可能快的东西。我在android / ios下,所以在firemonkey下
答案 0 :(得分:2)
您可以将double
值转换为UInt64
值:
PUInt64(@dOld)^ := AtomicCmpExchange(PUInt64(@d)^,PUInt64(@dNew)^,PUInt64(@dComp)^);
请注意,您需要根据平台规范正确对齐变量。
正如@David所指出的,比较double
值与比较UInt64
值并不相同。有些特定的双重值会表现得与众不同:
NaN
通常(在IEEE-754中指定)通过比较值来检测。
IsNaN := d <> d;
脚注:在比较NaN时触发Delphi默认异常处理程序,但其他编译器可能表现不同。在Delphi中,可以使用IsNaN()
函数。
同样,对于special meaning,零值可以是正数也可以是负数。将double 0
与double -0
进行比较将返回true,但比较内存占用将返回false。
答案 1 :(得分:0)
也许使用 System.SyncObjs.TInterlocked 类方法会更好吗?