jpf*_*ius 5 delphi multithreading thread-safety delphi-xe
我刚刚在文档中发现FloatToStr并且DateToStr在它们的单参数重载中不是线程安全的.原因是他们访问存储在全局变量中的本地化信息.
我的问题是:如果我不在运行时更改格式设置,这是否具有实际意义?据我了解,只要每个人都只读取格式设置 - 即使是多个线程,我也是安全的.
这是真的还是我错过了什么?
谢谢.
小智 14
FloatToStr,DateToStr和其他类似的函数正在读取全局格式设置.因此,如果您的应用程序没有更改这些函数调用的这些设置,那么它是线程安全的.对面的以下代码不是线程安全的:
DecimalSeparator := ',';
try
s := FloatToStr(123.45);
finally
DecimalSeparator := '.';
end;
Run Code Online (Sandbox Code Playgroud)
当您需要踏板安全和"本地"格式设置时,您必须使用重载函数,这些函数作为最后一个参数:AFormatSettings:TFormatSettings.因此,要使上面的代码线程安全,你必须写:
var
fs: TFormatSettings;
GetLocaleFormatSettings(GetThreadLocale, fs);
fs.DecimalSeparator := ',';
s := FloatToStr(123.45, fs);
Run Code Online (Sandbox Code Playgroud)
笔记:
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |