【问题标题】: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;
    

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 2020-03-31
      • 2015-05-10
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多