Delphi XE2无限等待线程中调用哪个等待方法

2023-12-20

如果我有一个

While not terminated do
begin
     doStuff;

end

在 Delphi XE2 线程的执行方法中循环,我不想让它让我所有的失败。

我该怎么称呼,

在 Delphi 7 中,这很简单,我调用 Sleep(X),其中 X 与我认为线程的有趣程度成反比。

但现在,我有

SpinWait(X);

调用 YieldProcessor X 次

and

Yield;

它调用 Windows 函数“SwitchToThread”。

我应该使用其中任何一个还是应该设置线程的优先级?


SpinWait浪费时间而不放弃处理器。就像是Sleep,但在延迟期间不会将控制权交给任何其他线程。如果您没有多个核心,那么这完全是浪费,因为在您旋转时没有其他线程可以做任何事情。据我所知,Yield类似于Sleep(0),但如果没有其他线程准备运行,则调用线程将立即继续。

如果您知道您的线程确实没有其他事情可做,那么这两种听起来都不是您想要的。

最好的解决方案是找到或建立一些可以等待收到信号的可等待对象(如信号量、事件或进程句柄)。这样您就不必费心醒来,只需轮询您的状态即可再次入睡。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi XE2无限等待线程中调用哪个等待方法 的相关文章

  • 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

    在我的 32 位应用程序中 我使用FindRegisteredPictureFileFormats 单元由 Cosmin Prund 提供 https stackoverflow com a 14677532 505088 gt 如何从图形
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 在 Delphi 中编程延迟的最佳方法是什么?

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • ExecutorService 应该是静态的和全局的

    我想在我的应用程序中使用相同的线程池 为此 我可以使ExecutorService静态和全局 以便我可以调用ThreadUtil executorService to get ExecutorService当我需要它的时候 public c
  • 如何向 PyQt5 GUI 添加线程?

    所以我使用 QT Designer 创建了一个 GUI 它工作得很好 但在更复杂的调用中 它不会更新主窗口并锁定 我想运行我的CustomComplexFunction 在根据不断变化的后端信息更新主窗口中的文本编辑时 我希望它每 2 秒运
  • 向无锁队列添加阻塞函数

    我有一个基于循环缓冲区的无锁多生产者 单消费者队列 到目前为止 它只有非阻塞push back and pop front 来电 现在我想添加这些调用的阻塞版本 但我想尽量减少这对使用非阻塞版本的代码性能的影响 也就是说 它不应该将它们变成
  • 如何延迟 onClick 操作

    我正在尝试在 java 应用程序 android 中做一些事情 并且我需要一些东西来延迟 等待循环的秒数 我怎样才能延迟android功能 我尝试过使用 Thread sleep TimeUnit sleep 但它只会执行几秒钟的不负责任的
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 如何使用 c++11 CAS 实现 ABA 计数器?

    我正在基于此实现一个无锁队列算法 http www cs rochester edu research synchronization pseudocode queues html 它使用计数器来解决 ABA 问题 但我不知道如何用c 11
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • 将 [字节数组] 分配给没有 Unicode 转换的 Variant

    考虑以下代码片段 在 Delphi XE2 中 function PrepData StrVal string Base64Val AnsiString OleVariant begin Result VarArrayCreate 0 1
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 查找字符串是否在列表中的最佳方法(没有泛型)

    我想做这样的事情 Result MyString in string1 string2 string3 string4 这不能与字符串一起使用 我不想做这样的事情 Result MyString string1 or MyString st
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 排序线程按照它们创建/启动的顺序运行

    我如何按照线程实例化的顺序对线程进行排序 我怎样才能让下面的程序按顺序打印数字1 10 public class ThreadOrdering public static void main String args class MyRunn
  • C# 中什么时候应该使用 volatile 关键字?

    谁能提供一个很好的解释volatile https learn microsoft com en us dotnet csharp language reference keywords volatileC 中的关键字 它解决了哪些问题 没
  • 任意通用列表的通配符

    我有一个类 MyClass 它不是通用的 包含任意 TList 并对其执行某些操作 我希望用通用 TList 替换 TList 但 MyClass 必须保持非通用 由于 Delphi 是不变的 这样的事情是行不通的 list1 TList
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa

随机推荐

  • Gorilla Mux 正则表达式

    我使用的是 Mux 包Golang 大猩猩工具包 http www gorillatoolkit org pkg mux对于我的路线 考虑以下路线 m HandleFunc admin install installHandler Meth
  • 如何删除 CSV 文件中的顶行(列标题)?

    我已经编写了一个脚本 该脚本将上传 CSV 文件 然后将数据提取到已制作的表中 我想让它的第一行 列标题 不会被插入到表中 但其余的数据会被插入到表中 fp fopen SESSION filename r while data fgetc
  • 我们将这种类型的参数传递 mul(1)(2)(3) 称为什么?如何解决这个问题以及如何解决这样的情况,如果像这样传递 n 个参数[重复]

    这个问题在这里已经有答案了 我们将这种类型的参数传递 mul 1 2 3 称为什么 如何解决这个问题 以及在像这样传递 n 个参数的情况下如何解决这种情况 我想了解这个概念是如何运作的 它被称为currying https en wikip
  • Hibernate Criteria 查询 - 嵌套条件

    我不知道如何使用 Hibernate Criteria Syntax 创建这样的查询 select from x where x a abc and x b def or x b ghi 您知道如何做到这一点吗 我正在使用 Hibernat
  • 获取 \p{L}+ 来匹配字符串[重复]

    这个问题在这里已经有答案了 我已经用头撞墙一个小时左右了 现在正在尝试我能想到的一切方法来让 p L 匹配 javascript 中的字符串 下面每次都返回 false 我不知道为什么 它可以在我的本地正则表达式测试器中运行 也可以在 re
  • 提高 WPF DataGrid 性能

    In my NET 3 5 WPF申请 我有一个WPF DataGrid其中将填充 500 列和 50 行 应用程序的性能在滚动时非常非常差 或者当我滚动时DataGrid Items Refresh 或在选择行时 实际上应用程序将需要大约
  • .net异步套接字超时检查线程安全

    http msdn microsoft com en us library system net sockets socketasynceventargs aspx http msdn microsoft com en us library
  • 重命名 ng-include 中的变量[重复]

    这个问题在这里已经有答案了 这是相关的html
  • 为什么我的 iOS 应用程序不禁用深色模式?

    所以 我尝试根据苹果文档将我的应用程序设置为通过强制浅色模式来禁用iOS 13深色模式 在模拟器中所有尝试都工作正常 但是当我在真实设备上尝试时 没有任何反应 就像我 我从未改变过我的代码 第一次尝试 覆盖窗口 视图或视图控制器的界面样式
  • 使用 Qt-Designer 自动扩展布局

    我正在使用 Qt 设计器 我想创建一个QVBoxLayout它将自动扩展以填充整个窗口 的布局QVBoxLayout保持固定 我怎样才能导致QVBoxLayout通过设计器扩大并充满整个窗口 创建您的后QVBoxLayout在 Qt Des
  • Latex - 提取子字符串/忽略字符

    我有以下问题 我定义了一个宏 func如下 newcommand func 1 do something with 1 X 1 Y 我现在想定义另一个宏 newcommand MyFunc 1 parse 1 and if it conta
  • 如何在 d3.js 转换中正确更新输入元素的文本值

    我一直在尝试 一步一步 转换一些非常好的但静态的和非 d3code https github com saebekassebil teoria tree master examples用于 d3 js 可视化中的动态动画 虽然与这个问题没有
  • 避免竞争条件?操作员

    是否 可用于调用委托或事件的运算符避免竞争条件 例如 手动避免竞争条件 The event invoking method that derived classes can override protected virtual void O
  • 为什么快速排序比基数排序更流行?

    为什么快速排序 或介绍排序 或任何基于比较的排序算法比基数排序更常见 特别是对于数字排序 基数排序不是基于比较的 因此可能比 O n日志 其实还可以n 其中 k 是用于表示每个项目的位数 并且内存开销并不重要 因为您可以选择要使用的存储桶的
  • 需要好的 RDLC(报告)示例/样本 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有条件地派生 Show 以获取在类型构造函数上参数化的存在类型

    假设我有这样的数据类型 LANGUAGE RankNTypes data X a forall b Show b gt X a b 我想导出Show X a 但当然我只能在有实例的情况下这样做Show a b 我很想写 LANGUAGE S
  • Django迁移找不到GDALRaster

    我接手了一个使用 Django Django REST 框架和 Leaflet 的项目 将绘制的路径存储在数据库中 在中安装 Djangovirtualenv并尝试迁移它会引发 文件 D SHK ElektroClean venv lib
  • Asp.net何时终止后台线程?

    我正在开发一个项目 有大量电子邮件发送其中的一部分 当用户单击按钮时 他 她会立即收到 感谢电子邮件已发送 作为响应 并且会触发相同的方法还有一个异步线程 ThreadPool QueueUserWorkItem SendEMail mes
  • 作业 - 尝试计算两个城市之间的多个航班停靠点?

    这是针对数据库类 使用 Oracle DB 11g Tables Flight flt no from city to city flt distance flt departs flt arrives flt price Aircraft
  • Delphi XE2无限等待线程中调用哪个等待方法

    如果我有一个 While not terminated do begin doStuff end 在 Delphi XE2 线程的执行方法中循环 我不想让它让我所有的失败 我该怎么称呼 在 Delphi 7 中 这很简单 我调用 Sleep