【问题标题】:Delphi XE Class using Parallel: how to?Delphi XE Class using Parallel:如何?
【发布时间】:2020-12-05 10:03:20
【问题描述】:

我需要模拟汽车在一个正方形区域上移动(比方说)。 任何人都可以轻松想象计算(x/y 坐标、轨迹、速度、加速度、暂停……) 以前的版本,(跨越千年虫开发...... 21 年前)运行到 Application.OnIdle

目前的流程听起来是这样的:
对于每个 aCarArray,都会完成对 TCAR.Execute 的调用(使用 GetTickCount 在 deltaT 上进行计算);
对于每个 aCarArray,然后在屏幕上绘制汽车并更新一些值
Sleep(100) 使应用看起来像响应式 又一次...

这种方法无法利用现代 CPU。 我想从在主线程中运行的 TCAR 对象数组移动到使用并行的类数组,但是我找不到任何示例来向我展示创建并行工作的类的方法;计算应该最连续地进行(大约一百辆汽车)。 目标是开发一个类,

  1. 创建这些 CAR 的数组。
  2. 发送启动/停止命令。
  3. 在屏幕上绘制汽车(通过主线程)
  4. 享受(代码的)结果

关于开始的最佳路径有什么建议吗?

问候。 乔瓦尼

【问题讨论】:

  • 请出示一些代码。

标签: class parallel-processing delphi-10.3-rio


【解决方案1】:

您正在查找的类可以从 TThread 继承。重写 Execute 方法以在循环中实现您必须执行的处理。您可以安全地调用 Sleep 以您想要的速度进行计算。

设计(或任何其他线程设计)中最重要的一点是您不能直接访问用户界面。您可以调用 Synchronize 以在主线程的上下文中执行方法,或者从线程类向必须进行渲染的表单或类发送消息。

要在屏幕上绘制大量汽车,您可以考虑绘制到 TBitmap,然后在绘制完成后将位图绘制到屏幕上。这样可以避免闪烁。

【讨论】:

  • 非常感谢。我会让你知道事情的进展。
  • @GiovanniBrambila 如果我的答案符合您的需要,请将其标记为已接受(答案左侧的复选标记)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多