delphi怎么实现线程池??? ( 积分: 30 )

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
M

mill666

Unregistered / Unconfirmed
GUEST, unregistred user!
想用delphi创建线程池;
就是想达到:创建好N个线程后让其等待某一个事件的发生;当这一事件发生时,其中一个线程来处理这个事件,而其他线程因为取不到这个事件的控制权而继续处于等待状态。
不知道要怎么做??
 
研究一下完成端口,等你完成端口研究完,线程池就出来了!!
 
To zealothasu:
我就是在学完成端口的时候碰到这个问题的;
因为完成端口一般只开 CPu*2个工作者线程的,而我接收完数据后需要进行一些业务逻辑处理,这些业务逻辑处理比较费时间,所以不可能把这个业务逻辑处理过程写在工作者线程里面;如果再写一个业务逻辑处理的线程类,让工作者线程每接收完数据后就创建一个业务逻辑处理的线程来处理数据,这服务器就最终变成是一个“一个客户端连接,一个新线程”的模式了,就无法显示IOCP的优越性了。
所以需要建立另外一个跟完成端口无关的线程池,叫做业务处理线程池;
请问这么一个线程池要怎么创建,而完成端口的工作者线程在接收完数据后又要怎么通知这个业务处理线程池以便这个线程池启动一个线程来处理业务逻辑??
可以说我的问题跟完成端口没有关系的,而只是一个“delphi里面怎么创建线程池”的一个普遍问题,另外再加上工作者线程怎么通知这个线程池的问题。
 
那是因为你对完成端口了解不够
既然你知道完成端口,肯定知道post和get函数
你可以创建一个完成端口,但是不跟任何socket绑定,创建你需要的工作线程等待
你需要处理某些事的时候,直接post,这时候自然有工作线程get到此事件,完全符合你的要求
其实线程池比socket完成端口简单100倍,不用考虑n多东西
windows做好的东西不用太可惜了.........何必自己增加n多的控制.........
 
To zealothasu:
你的意思是说,再创建一个不跟socket打交道的完成端口吗??
然后在“跟socket打交道的完成端口”接收完数据后给这个“不跟socket打交道的完成端口”post一个信息否??然后等这个“不跟socket打交道的完成端口”处理完业务逻辑处理后,再给“跟socket打交道的完成端口”post一个信息??
如果是这样的法,倒是一个好办法,不知道实现起来困难否??
 
开一个线程数组(结构类型,含TCustomSocket对象、线程状态字段、线程对象等),
然后写点代码完成分配、复位。不就行啦?
何必写底层的完成端口?在TClientSOcket/TServerSocket照样可实现一样的效果。
 
何谓底层?
完成端口并不神秘,
绝对比什么线程数组方便
代码肯定精简
 
动态线程数组~~
 
后退
顶部