大概看了下楼主的代码,这个是cnVCL中的线程池代码,10年前的代码啦,本身就有些问题

解决方案 »

  1.   

    在线程里直接操作vcl,是有问题的
    需要加 同步,但是 加了同步,又失去了并发的意义所以,不用多个线程同时操作界面控件
      

  2.   

    谢谢回复.一直忙着写东西没上来看...对于此线程池.我以为是同步执行.执行完线程后还会自动执行线程执行完后的数据.
    FThreadsPool.OnThreadFinalizing := FCustomWorkTask.TProcessorThreadFinalizing; // 线程结束时触发的事件
     
     
    但是他却没有触发.是因为执行完
    FThreadsPool.OnProcessRequest := FCustomWorkTask.DealwithCommRecvData; //线程执行的模块线程模块后,线程就存持着一直不动.也就所谓的线程并没有结束...但是最终我想表达的是.这个线程的线程是排序方式执行.而不是并发执行..就算同时开着五条线程.也只有一个线程在运行...这就是我想说的...不知道能不能推荐一款易用又好的现代版线程池...先感谢 
      

  3.   

    线程池 应该比较简单的吧一个list,每项对应一个线程对象
    有新任务,找个挂起的线程对象,由它运行
    运行完毕,挂起
    都在运行,新增一项,对应新创建的线程对象,由它运行
      

  4.   


    看你的工作线程是怎么写的?这个线程池实现很简单,要看怎么用。特别需要注意的是TProcessorThread(FThreads[i]).Terminate;如果子类的实现未遵守“规则”,即使关闭了应用,线程也还是在跑(进程还在,通常会倒置进程无法退出)  目前比较好的第三方线程管理库是OmniThreadLibrary,比较大,需要看他的UML图。
      

  5.   

    感谢各位的答复...可能我的描述大伙还是没听明白.我对这一个线程池的概念和各位一样.声明就必须要执行.执行完后可以挂等待下一个任务..防止不断重建的而浪费时间..但是我想说的是你同步执行多个线程的时候.多条线程应该在不同的时间同步执行.而不是等待一条线程完全执行后才会去执行下一个的线程.....不知道我这样描述你们有明白不...我是希望知道我这样的想法.在这个线程池能不能实现...完整代码:http://blog.csdn.net/jian704/article/details/1834122
      

  6.   

    这个代码有问题。轻量级的线程池用AsyncCalls,重量级的用OmniThreadLibrary