Delphi:线程作业的线程列表 - 排队

mig*_*jek 4 delphi queue multithreading

我有一些基于TThreads的操作.现在我需要创建包含要完成的作业列表的线程,然后在前一个完成后立即触发每个...我应该如何编写它?我不能允许线程同时运行,因为可能有超过10 000个操作要完成.很难找到TEvent和其他同步对象的文档示例......希望我能在这里找到一些帮助......

先谢谢,迈克尔

mgh*_*hie 5

不要将操作建立在线程上.这是错误的设计.相反,您应该为您的操作创建一个基类,它公开了一个执行操作的方法.编写后代类来实现具体操作.不要对线程上下文做任何假设,总是使用关键部分或类似的同步对象来保护对共享资源的访问.更重要的是,尽量避免使用共享资源,或者至少尝试将共享资源设置为只读,这样就不需要锁定.

通过该设计,可以通过直接调用操作方法来执行VCL线程中的每个操作,使用TThread后代类在其自己的线程中执行操作(您现在看起来像这样),或者安排所有操作在线程池上.可以在运行时调整池中的线程数,以匹配操作的性质(处理器绑定或I/O绑定)和系统具有的处理器核心数.并回答您的问题:甚至可以通过强制池使用单个线程来完全序列化操作.基本上,您可以完全改变操作的执行方式而不需要更改它们.