Delphi中的抢占式多线程

时间:2010-11-19 00:28:00

标签: multithreading delphi preemptive

我读过有关抢先式多线程herehere的信息。

有没有办法在Delphi中做到这一点,这与 other methods of threading in Delphi的比较(优点和缺点)是什么?

3 个答案:

答案 0 :(得分:7)

您所指的“其他方法”似乎都在使用操作系统的底层线程功能 - 这是先发制人的。换句话说,选择你认为最方便的,这将是先发制人的。

获得非抢先(又称合作)线程需要一些额外的工作,通常是将线程转换为“光纤”。

答案 1 :(得分:5)

Windows的现代版本都是preemptive multitasking个操作系统。这意味着线程和进程(存在的进程需要至少一个执行线程)都被调度并抢先运行。

所以“有没有办法在Delphi中做到这一点”有以下答案:

  • 您的单线程Delphi应用程序已经预先安排了其他应用程序
  • 如果您编写多线程Delphi应用程序,它也将是。 您必须付出相当大的努力来编写非抢先模型,例如应用程序中的协作线程模型。一种方法可能是使用coroutines; here is an example using Delphi 7

最佳答案是使用TThread 或任何native Windows thread或其周围的包装。你将有先发制人的多线程。

链接中的所有模型都使用普通的Windows线程,我怀疑你的问题意味着你对不同的线程技术感到困惑,这些技术主要是通信或运行任务的技术(在其他线程上运行的工作。)如果在这种情况下,您可能想要更新您的问题或要求其他人寻找这些模型的解释。

答案 2 :(得分:2)

您是否看过Windows 7中引入的User-Mode Scheduling。光纤基本上不起作用。在MSDN网站上有很多关于此的信息,我似乎回想起第9频道的一些视频。