【问题标题】:Delphi 2007, Indy - Is a variable declared in a TidTCPServer thread safe in contexts?Delphi 2007,Indy - 在 TidTCPServer 线程中声明的变量在上下文中是否安全?
【发布时间】:2015-08-07 07:49:30
【问题描述】:
如果我有一个TidTCPServer 实例并且我声明了一个TFormatSettings 并在Create 例程中填充它,那么引用这个变量是否安全(例如在线程的Execute 方法中调用Format ('%1.6f', [SomeReal], AFormatSettings]),当执行的上下文可能不止一个?
如果不是,我如何进行线程安全引用?
【问题讨论】:
标签:
multithreading
thread-safety
indy
delphi-2007
tcpserver
【解决方案1】:
只要你在没有线程访问它时修改AFormatSettings,它就是线程安全的(例如在激活服务器之前初始化它),并且线程只从它读取。 Format() 不会修改传递给它的 TFormatSettings。
【解决方案2】:
如果您对线程安全有疑问,可以创建以下函数并使用它来代替 Format。
ThdSafeFormat(const aFormat: string; const aArgs: array of const): string;
var
FormatSettings: TFormatSettings;
begin
GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FormatSettings);
Result := Format(aFormat, aArgs, FormatSettings);
end;