4

我在这里这里读过关于抢占式多线程的信息。

有没有办法在 Delphi 中做到这一点,这与 Delphi 中的其他线程方法相比(优点和缺点)如何?

4

3 回答 3

7

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

获得非抢占式(也称为协作式)线程需要一些额外的工作,通常是将线程转换为“纤维”。

于 2010-11-19T00:32:35.977 回答
5

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

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

  • 您的单线程 Delphi 应用程序已经与其他应用程序抢先调度
  • 如果你编写一个多线程的 Delphi 应用程序,它也将是。 您将不得不付出相当大的努力来编写非抢占模型,例如应用程序中的协作线程模型。一种方法可能是使用协程这是使用 Delphi 7 的示例

最好的答案是使用TThread或任何本机 Windows 线程或围绕它们的包装器。您将拥有抢占式多线程。

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

于 2010-11-19T01:25:39.217 回答
2

您是否看过Windows 7 中引入的用户模式调度。光纤基本上不起作用。MSDN 网站上有很多这方面的信息,我似乎记得第 9 频道的一些视频。

于 2010-11-19T19:53:37.880 回答