gpt4 book ai didi

delphi - 如何使多行函数原子化

转载 作者:行者123 更新时间:2023-12-03 15:37:13 25 4
gpt4 key购买 nike

我有一个函数必须不间断地完整运行并返回结果。如果异步事件导致它在仍在执行时再次被调用,则必须以某种方式阻止该调用,直到第一次调用完成。

互斥体?还有别的吗?

<小时/>

[更新]该函数位于我的主窗体类中,并从该类的两个方法调用:一个处理从串行端口读取的数据,另一个处理计时器到期。这两个似乎都在自己的线程中运行,因为一个函数的调用可以被另一个函数的调用中断(对我来说,在应用程序级别,它们只是我在设计时放在主窗体上的组件) )。

也许TCriticalSection? (但是谷歌搜索不清楚我是否需​​要使用acquire/release或'enter/leave',而且似乎由于代码是在may mainform的简单函数中,所以它将是可重入的)。

也许我要求的是一种使代码“不可重入”的方法,阻塞直到第一个条目完成?无论答案是什么,我认为我需要一个代码示例,或者一个 UTl :-(

(请注意 this page 提供了很多有用的信息(我并没有全部理解,但它看起来对其他人非常有用))

<小时/>

[更新]这与 GUI 更新无关,只是发送一些 TCOP 数据的每个事件都应该接收响应。

虽然该应用程序有一个 GUI - 它是基于表单的 - 这只是在我想显示一些调试信息的情况下,因为该应用程序将在没有显示器的 PC 上运行(是的,我知道它仍然有一个 GUI ,但这不是我的问题/点)

最佳答案

假设您担心同一线程的重入,那么阻塞重入调用将导致经典的死锁。如果这是您的情况,那么您需要执行以下操作之一:

  1. 确保不会发生重入调用,或者
  2. 检测可重入调用并通过添加到队列以供稍后处理来推迟它,或者
  3. 检测重入调用并忽略它。

很可能这些选项都不吸引您!

如果您担心来自不同线程的同时调用,那么您可以使用某种锁。例如,在 Windows 上,您通常会使用关键部分。

关于delphi - 如何使多行函数原子化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com