gpt4 book ai didi

performance - Delphi - 如果用户仍在输入则延迟处理

转载 作者:行者123 更新时间:2023-12-03 18:47:11 24 4
gpt4 key购买 nike

我有一个具有编辑字段的应用程序。用户将在此字段中键入搜索短语。我正在尝试实时显示对用户文本的点击。输入三个字符后,我进行第一次搜索,然后在每个字符或退格键后再次执行搜索。

问题是,随着我的搜索算法越来越先进,搜索所需的时间也越来越长。用户可以比结果生成/显示之前更快地键入。结果,该应用程序感觉迟钝/缓慢。我有几个选择:(1).等到用户点击回车 (2)。将搜索放在不同的线程中并异步执行。在这里有点犹豫,因为我之前从未使用过线程 (3)。实现某种类型的延迟,以便如果用户仍在打字,我会等待用户停止。

我倾向于选项 3,但如何检测用户是否仍在输入?我是否必须保留与每次击键相关联的时间戳?

最佳答案

如果我是你,我会坚持使用线程解决方案。


它速度更快,不会滞后,而且 - 如果编写得当 - 不会引入额外的问题,并且是通过一个不那么危险或困难的问题来学习线程的好机会。如果您选择此解决方案,则必须执行四个简单的步骤:

  1. Create表单上的 OnSearchFinished() 事件处理程序,并将其分配给消息代码(如 WM_USER + 1)。此消息将在您的线程完成生成搜索结果后发送。
  2. 在将执行搜索的 .Execute() 方法中使用您的搜索代码创建一个 TThread 后代。它必须有一个包含搜索词的字段。 (.Execute() 不会被直接调用,因此它无法处理参数。您可以通过 .Resume() 执行 TThread 后代。)类可以在表单的构造函数中创建,需要在挂起状态下创建。
  3. 假设您的搜索代码有一个主循环,您将 have to check如果您的主程序在您的对象上调用了 .Terminate()如果是,您必须退出循环。
  4. 在处理搜索的 .OnChange().OnKeyDown() 中,您应该(首先).Terminate() 您的线程(以停止已经运行搜索(如果有)),然后将该字段设置为您的新搜索词并 .Resume() 它。

关于performance - Delphi - 如果用户仍在输入则延迟处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573267/

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