Multithreading 正确的选择?

Multithreading 正确的选择?,multithreading,delphi,Multithreading,Delphi,我是线程新手,因此我不确定线程是否是解决这个问题的正确方法 我的程序需要执行几次计算,后面是相同的logik,但参数不同。计算时间越长,越接近完美答案。计算持续时间无法预先测量(从几秒钟到几分钟) 用户希望在特定时间按顺序(从计算1到X)获得结果。只要他得到一个结果,他对不是完美的解决方案感到满意。一旦他有了一个解决方案,他就对以前的那个不感兴趣(例如:他在计算1中得到了一个不完美的答案,现在要求计算2中的答案;即使现在计算1有一个更好的答案,他也对它不感兴趣) 线程化是正确的方法吗?线程化听起

我是线程新手,因此我不确定线程是否是解决这个问题的正确方法

我的程序需要执行几次计算,后面是相同的logik,但参数不同。计算时间越长,越接近完美答案。计算持续时间无法预先测量(从几秒钟到几分钟)

用户希望在特定时间按顺序(从计算1到X)获得结果。只要他得到一个结果,他对不是完美的解决方案感到满意。一旦他有了一个解决方案,他就对以前的那个不感兴趣(例如:他在计算1中得到了一个不完美的答案,现在要求计算2中的答案;即使现在计算1有一个更好的答案,他也对它不感兴趣)


线程化是正确的方法吗?

线程化听起来是一种很好的方法,因为您可以在后台线程上执行长期运行的计算,同时保持UI的响应性

为了满足按顺序生成结果的要求,您可能需要一种停止不再需要的线程的方法。中止它们(可能是极端的),或者只是向它们发出停止和/或返回当前结果的信号


注意:您可能希望线程定期通过UI检入以报告进度(%complete)、检查任何中止请求等。尽管这完全取决于您的应用程序,不一定是必需的。

这取决于您没有说明的内容。计算需要1毫秒、1秒还是100秒?为了让您在多线程部门受益,如果您的计算只需10毫秒,您的工作回报将非常小。即使计算时间很长,在线程内部执行此操作的唯一真正原因是1)如果有多个不同的计算需要同时执行,或者2)如果您希望UI在计算过程中保持响应。@Jerrydoge我认为,在当今这个时代,任何冗长的处理都应该异步完成,这是安全的。如果您在几秒钟内没有为消息队列提供服务,Windows Vista及更高版本将使窗口淡入淡出状态,告诉用户应用程序没有响应,并会让用户终止进程。这就留下了三个可行的选择:(1)Application.ProcessMessages,我们可以很高兴地把它放在路边;(2) 后台线程,或(3)自制
peek消息
/
调度
循环…可能需要谨慎使用。@J。。。你提到要小心使用,但是在使用<代码>应用程序时,你应该非常小心。PrimultMease<代码> -更好的是,不要考虑使用它。@ JerryDodge,这就是我所说的“离开路边”——也许这个表达不是那么广为人知。它的意思是留下一件东西——让它被废弃,等等。它像一个符咒一样工作,不可能给出反馈(递归本身不知道它什么时候完成),但我需要的是一系列可能的解决方案。Thx@Zibelas-没问题,很乐意帮忙