关于控制线程的数目,困扰很长时间了,大家帮个忙~~(50分)

  • 主题发起人 主题发起人 竹音
  • 开始时间 开始时间

竹音

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序里需要启动多个线程,而且不是一次性启动,这些线程属于不同的线程类。
我现在打算使用一个控制线程,它有一个maxthreadcount,标志最多可以开多少个线程。每次开线程的时候,调用控制线程的一个方法,如果当前线程总数小于maxthreadcount,那么该线程可以继续运行,否则,线程挂起,将其句柄放到TList里,每当有一个线程结束,也调用控制线程的一个方法,从Tlist里取出第一个线程,将其resume。控制线程在整个过程中,一直等待进程的关闭事件,啥也不干[:)]
可是我觉得这种方法有点傻。
我最近看了些帖子,觉得semaphore可能可以实现我所要的功能,不过不会用。
请DFW们指点一下。有更好的方法当然更好。或者,在我的实现方法中,能有些细节方面的指导。
谢谢了~~
 
我觉得可以实现就好。
可以实现,系统稳定,效率不错,系统资源占用少,就可以了。你还要怎么样?
 
这样做不是挺好吗?
 
这个思想很好啊,很完整啊,为什么不行啊,这个其实就是一个线程池的原理啊
 
你的方法不错,我也常用,
如果是semaphore,我有个想法,
1、创建semaphore,CreateSemaphore(nil,maxthreadcount,maxthreadcount,nil);
2、把你那些不同的线程类继承自同一父类,在父类里创建beforeExecute和afterExecute虚拟函数,在beforeExecute里WaitForSingleObject(semaphore,INFINITE),在afterExecute里ReleaseSemaphore(semaphore,1,nil)
这样当正在运行的线程数达到maxthreadcount时,后续创建的将处于等待状态,这样做有个坏处,不能控制创建的线程数,只能控制正在运行的线程数!
献丑了!
 
两种方法我都实现了。
但是我没有做到控制线程创建的数目,只是控制了同时运行的线程数目。而我的程序有可能会一次性创建好几百个线程……[:(]
我考虑过用线程数组,但是不知道细节怎么实现。
java可以用线程池,不知道delphi的线程池怎么实现。
呵呵,希望大家能够给我指导。
 
你看看delphi中的这个TThreadList
 
之前我用了TThreadList,它就是和TList比起来是线程安全的,呵呵,和我这没什么直接的关系。
我现在自己用Semaphore实现了控制线程创建的数目。
但是,还是希望能用线程数组,线程池等技术,做到线程的复用。
呵呵,请大家指教。
 
郁闷,线程池,你在http://www.2ccc.com/default.asp去下一个三
搜 ThreadPool 或 线程池就可以搜到
 
不好意思。拖这么久才结帖^_^
 
后退
顶部