FloatToStr / DateToStr 的线程安全性

2024-07-03

我刚刚在文档中发现FloatToStr and DateToStr它们的单参数重载不是线程安全的。原因是它们访问存储在全局变量中的本地化信息。

我的问题是:如果我不在运行时更改格式设置,这有任何实际意义吗?据我了解,只要每个人都只读取格式设置(即使是从多个线程),我就是安全的。

这是真的还是我在这里遗漏了一些东西?

Thanks.


FloatToStr、DateToStr 和其他类似函数正在读取全局格式设置。因此,如果您的应用程序不更改这些函数调用的这些设置,那么它就是线程安全的。相反的以下代码不是线程安全的:

DecimalSeparator := ',';
try
  s := FloatToStr(123.45);
finally
  DecimalSeparator := '.';
end;

当您需要胎面安全和“本地”格式设置时,您必须使用重载函数,该函数采用最后一个参数:AFormatSettings:TFormatSettings。因此,为了使上面的代码线程安全,你必须编写:

var
  fs: TFormatSettings;

GetLocaleFormatSettings(GetThreadLocale, fs);
fs.DecimalSeparator := ',';
s := FloatToStr(123.45, fs);

Notes:

  1. GetLocaleFormatSettings 和 fs 初始化可能会被调用一次,然后 fs 可能会被多次使用。这将加快代码速度。
  2. 可以使用 TFormatSettings.Create 代替 GetLocaleFormatSettings。我不确定它是什么时候引入的,但我在 Delphi XE 中看到了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FloatToStr / DateToStr 的线程安全性 的相关文章

  • delphi中如何直接从内存中执行代码?

    是否可以模仿loadlibrary功能 我想从 BLOB 字段加载库 而不先将其写入临时文件 并且我需要一个不依赖于特定版本的 delphi 编译器或 Windows 的解决方案 并且不会触发防病毒软件 是的 你可以 但你不需要loadli
  • 如何从剪贴板保存 PngImage

    如何将 png 图像保存到从 Adob e Fireworks 剪贴板 或 Photoshop 复制的文件而不丢失透明度 我用的是delphi2009 先感谢您 TLama 我尝试了这段代码 但没有透明度 我也不知道我这样做是否正确 png
  • 我可以使用什么脚本工具来自动测试 Delphi 程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个用于自动化测试的工具 我将使用脚本进行测试 而不仅仅是自动化 这意味着它不能只发送一些按
  • 使用多处理或线程加速单个任务

    是否可以使用多处理 线程来加速单个任务 我的直觉是答案是否定的 以下是我所说的 单一任务 的示例 for i in range max pick random choice on off both 当参数为 10000000 时 在我的系统
  • Java 让物体在按住按钮时移动

    如何使 JPanel 在按住按钮时移动并在释放按钮时停止 我尝试过将 thread start 与 Runnable 一起使用以及类似的方式 我总是遇到错误 有人可以帮助我吗 您需要考虑许多重要的因素 按钮的设计初衷并非如此 它们被设计为在
  • 无锁“如果不为零则递减”

    我目前正在用 C 重新发明线程池的轮子 我已经消除了代码中的几乎所有锁 除了以下构造的多个实例之外 std atomic size t counter void produce counter void try consume if cou
  • 计时器计划与scheduleAtFixedRate?

    public class MyTimerTask extends TimerTask Override public void run int i 0 try Thread sleep 100000 catch InterruptedExc
  • 单线程应用程序是否只运行在一个CPU上

    我正在一台 8 CPU 机器上开发一个单线程应用程序 当发生繁重操作时 CPU 利用率如下所示 NET 框架是否有一些工具可以将单个线程的工作 自动 分配给其他 CPU 不保证任何单个线程始终在同一核心上运行 但保证只能在一个核心上运行同时
  • 我可以在没有 ExecutorService 的情况下使用 Callable 线程吗?

    我可以在没有 ExecutorService 的情况下使用 Callable 线程吗 我们可以在没有 ExecutorService 的情况下使用 Runnable 的实例和 Thread 的子类 并且此代码可以正常工作 但这段代码始终有效
  • 我可以在没有 ExecutorService 的情况下使用 Callable 线程吗?

    我可以在没有 ExecutorService 的情况下使用 Callable 线程吗 我们可以在没有 ExecutorService 的情况下使用 Runnable 的实例和 Thread 的子类 并且此代码可以正常工作 但这段代码始终有效
  • 如何在Rails启动时创建线程?

    我试图在 Rails 启动时创建一个线程 该线程将在应用程序的整个生命周期中运行 奇怪的是 我已经将其与我正在运行的另一个线程一起使用了 我复制了该 工作 代码并将其用作新线程的新代码的样板 但线程不会启动 代码位于配置 初始化程序中 这是
  • 高CPU,可能是由于上下文切换?

    我们的一台服务器的应用程序的 CPU 负载非常高 我们查看了各种统计数据 但在寻找问题根源时遇到了问题 当前的理论之一是涉及的线程太多 我们应该尝试减少并发执行线程的数量 只有一个主线程池 有 3000 个线程 以及一个与之一起工作的 Wo
  • 事务内存需要什么才能可行?

    我一直在研究事务内存及其对系统编程 数据库 操作系统 服务器等 的可行性 我自己使用事务的经验 以及看到很少有社区在实际代码中使用事务 提出了一个问题 什么会说服你 一个编写生产代码的开发人员 在你的工作中使用事务内存 会被普遍采用吗 高速
  • 为什么TEdit只显示长度等于或小于37440个字符的文本?

    如果你这样做 Edit1 Text StringOfChar X 37440 它将显示文本 但是如果您这样做 Edit1 Text StringOfChar X 37441 文本将不会出现 有人知道为什么吗 如果这是一个错误 除了将所有现有
  • 如何获取集合类型的任何变量的元素数量?

    AFAIK 没有内置函数 在网上搜索我发现了这个function http www codenewsfast com cnf article 0 permalink art ng53q107885它对我有用 但我不想使用它 因为它是汇编 我
  • 测试最终字段的初始化安全性

    我试图简单地测试 JLS 保证的最终字段的初始化安全性 这是为了我正在写的一篇论文 但是 根据我当前的代码 我无法让它 失败 有人可以告诉我我做错了什么 或者这只是我必须一遍又一遍地运行然后在一些不幸的时机看到失败的事情吗 这是我的代码 p
  • 哪个STL容器具有线程安全的插入过程?

    哪个STL容器具有线程安全的插入过程 我希望多个线程同时插入同一个容器中 欢迎除 STL 即 Boost 之外的任何实现 STL 容器不是线程安全的 如果您愿意的话 您必须通过自己的同步来强加这一点
  • Java并发hashMap检索

    ConcurrentHashMap文档说 检索操作 包括 get 通常不会阻塞 因此可能与更新操作 包括 put 和 remove 重叠 检索反映了最近完成的更新操作在其开始时的结果 更正式地说 给定键的更新操作与报告更新值的该键的任何 非
  • 安全地抛出在另一个线程上创建的异常 C#

    我想在线程A中捕获异常 然后将异常对象传递给线程B 并从线程B中抛出它 这样安全吗 Thread A try Code that throws exceptions catch Exception e sendToOtherThread e
  • 通过PID获取进程句柄

    我想通过进程名称获取进程的句柄 我有 PID 但当我使用openProcess要始终获取句柄 它将返回 0 或 180 这是我用来使 PID 正常工作的函数 Handle OpenProcess PROCESS QUERY INFORMAT

随机推荐

  • 如何让 IzPack 检查该软件的现有版本?

    我有一个我们使用的应用程序IzPack http izpack org创建安装程序 安装程序在当前状态下工作正常 但是 我需要添加功能以使其能够check是否是现有版本该软件已安装 我了解 IzPack 使用其开箱即用的方式支持此功能Che
  • 无法使用 smack、openfire 获取名册的存在

    我是 smack API 的新手 我正在尝试开发一个聊天应用程序 我试图在其中设置和获取状态 当我更改用户的存在时 它工作得很好 并且反映在 Openfire 服务器中 但是 当我尝试获取用户的存在状态时 即使他在 openfire 中的存
  • React-Native:警告:无法对未安装的组件执行 React 状态更新

    当我尝试从一个屏幕转换到另一个屏幕时 收到以下错误消息 这种情况发生在游戏应用程序中 其中多部手机参与游戏 并且根据它们在游戏中的角色以及该手机是主持游戏还是访客而具有不同的屏幕 当我尝试到达下一个屏幕 在左侧手机上 时 下图显示了此错误消
  • 如今,Macintosh 上的 TWAIN 状态如何?

    我目前正在开展一个项目 我们希望在 PC Windows 和 Macintosh 上与 TWAIN 扫描仪进行交互 在 Windows 上 我们基本上已经把一切都准备好了 并且代码可以在绝大多数扫描仪上成功运行 在 Mac OS X 上 我
  • 在执行 .toString() 后如何取回对象? [复制]

    这个问题在这里已经有答案了 我有一节课数据 java public class Data private String name private String age getters and setters for the above fi
  • 使用 gawk 解析 CSV 文件

    如何使用 gawk 解析 CSV 文件 简单设定FS 还不够 因为内部带有逗号的引用字段将被视为多个字段 使用示例FS 这不起作用 文件内容 one two three four five six seven eight nine 呆呆的脚
  • 了解 glibc malloc 修剪

    我目前正在开发的一些程序消耗的内存比我想象的要多得多 所以我试图了解 glibc malloc 修剪是如何工作的 我写了以下测试 include
  • 有任何与 MS-Access 一起使用的 ORM(用于原型设计)吗?

    我正处于项目的早期阶段 目前还不清楚我们是否需要一个 真正的 数据库 即 SQL Server 等 所以我一直在使用 MS Access 进行一些原型设计 到目前为止运行良好 在C VS2008 Net 3 5 MS Access 2000
  • 向 Clang 的 AST 添加节点

    我需要将新节点插入 AST 例如 向函数添加命名空间 转动这个 void foo 进入这个 namespace bar void foo I read 如何克隆或创建 clang 的 AST Stmt 节点 https stackoverf
  • 如何在 SQL Server 2005 中将单行转换为列

    我有一个表 它返回的数据为 Column1 Column2 Column3 Column4 Column5 Column6 6 Joy Mycity NZ 123456 email protected cdn cgi l email pro
  • 使用python读取并显示原始图像

    我想尝试使用spyder python查看图像 如下所示 网盘分享 http sdrv ms 15JHr6a该图像是 uint16 10 位 宽度 1376 像素 高度 960 像素 无标题 拜耳图案蓝绿 绿红 什么python脚本合适 T
  • 如何创建一个 HTML 按钮,其作用类似于同一页面上某个项目的链接?

    我想创建一个 HTML 按钮 其作用类似于指向同一页面上的项目的链接 因此 当您单击该按钮时 它会重定向到同一页面上的项目 我怎样才能做到这一点 我会将解决方案限制为 HTML CSS 和 JavaScript 因为目前我没有使用任何其他语
  • 如何让“IE 6 条件注释”发挥作用?

    我有这个标记 效果很好 div class header headerNotIE6 我现在正在尝试放置一个特定于 ie6 的解决方法 因此我尝试仅在浏览器不是 IE 6 的情况下使用此 div 因此 如果它是 IE7 8 firefox 和
  • 随机播放与排列 numpy

    有什么区别numpy random shuffle x and numpy random permutation x 我已阅读文档页面 但当我只想随机洗牌数组的元素时 我无法理解两者之间是否有任何区别 更准确地说 假设我有一个数组x 1 4
  • Android 在 onTextChanged 中调用 setText

    为了防止无限循环 我做了这样丑陋的事情 Override protected void onTextChanged CharSequence text int start int lengthBefore int lengthAfter S
  • Angular 的“controllerAs”在routeProvider 中不起作用

    我正在尝试使用controllerAs财产在 routeProvider路线没有任何成功 这是示例代码 var app angular module app ngRoute app config routeProvider location
  • 在 Tkinter 文本小部件被文本小部件绑定后,如何在 Tkinter 文本小部件中绑定自身事件?

    我想在之后绑定自身事件Text小部件类绑定 以便在调用我的绑定函数时更改小部件的文本 以我的绑定为例self text bind
  • 有什么办法可以覆盖Python的内置类吗?

    我正在尝试改变 python 的行为int类 但我不确定是否可以使用纯Python来完成 这是我到目前为止所尝试的 import builtins class int new builtins int def eq self other r
  • Webkit 背面可见性不起作用

    我正在构建一个简单的示例来使用以下方法翻转卡片 webkit transform rotateY财产 前几天还好好的 突然就不行了 该效果仍然有效 但是当我将鼠标悬停在卡片上时 正面应该消失以使背面可见 为此我正在使用 webkit bac
  • FloatToStr / DateToStr 的线程安全性

    我刚刚在文档中发现FloatToStr and DateToStr它们的单参数重载不是线程安全的 原因是它们访问存储在全局变量中的本地化信息 我的问题是 如果我不在运行时更改格式设置 这有任何实际意义吗 据我了解 只要每个人都只读取格式设置