本着"分不在高够用就行"的原则,现送分200.呵呵  
 
 
顺便问一下:  
 
     我创建了一个线程类,我怎么知道有几个线程(实例)在运行,  
又如何同时terminate它们??

解决方案 »

  1.   

    我给你个思路,解决你的没问题
    在API参考大全里有个线乘的部分,里面的很多API可以解决你的问题,
    就是让你一个一个查API!
      

  2.   

    哥们,在创建的时候,取得线程指针,保存到一个tlist中。
      

  3.   


     
    Delphi中实现多线程同步查询  摘 要:实现多线程同步查询
    关键字:多线程,同步查询
    类 别:数据库
     
     
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, Grids, DBGrids, StdCtrls;type
      TForm1 = class(TForm)
        Session1: TSession;         { 属性SessionName填写为S1                 }
        Database1: TDatabase;       { 属性SessionName选择为S1                 }
        Query1: TQuery;{ 属性Database选择为Database1;属性SessionName选择为S1 }
        DataSource1: TDataSource;   { 属性DataSet设置为空                     }
        DBGrid1: TDBGrid;           { 属性DataSource选择为DataSource1         }
        Session2: TSession;         { 属性SessionName填写为S2                 }
        Database2: TDatabase;       { 属性SessionName选择为S2                 }
        Query2: TQuery;{ 属性Database选择为Database2;属性SessionName选择为S2 }
        DataSource2: TDataSource;   { 属性DataSet设置为空                     }
        DBGrid2: TDBGrid;           { 属性DataSource选择为DataSource2         }
        BtnGoPause: TButton;        { 用于执行和挂起线程                      }
        procedure FormCreate(Sender: TObject);      { 创建窗体时创建线程对象  }
        procedure FormDestroy(Sender: TObject);     { 销毁窗体时销毁线程对象  }
        procedure BtnGoPauseClick(Sender: TObject); { 执行线程和挂起线程      }
      private
      public
      end;  TThreadQuery = class(TThread) { 声明线程类 }
      private
        FQuery: TQuery;             { 线程中的查询组件                     }
        FDataSource: TDataSource;   { 与查询组件相关的数据感知组件         }
        procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
      protected
        procedure Execute; override;{ 执行线程的方法                       }
      public
        constructor Create(Query: TQuery;
                           DataSource: TDataSource); virtual; { 线程构造器 }
      end;var
      Form1: TForm1;
      Q1,                   { 线程查询对象1 }
      Q2: TThreadQuery;     { 线程查询对象2 }implementation{$R *.DFM}{ TThreadQuery类的实现 }{ 连接数据查询组件和数据感知组件}
    procedure TThreadQuery.ConnectDataSource;
    begin
      FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 }
    end;procedure TThreadQuery.Execute;{ 执行线程的方法 }
    begin
      try
        FQuery.Open;                   { 打开查询 }
        Synchronize(ConnectDataSource);{ 线程同步 }
      except
        ShowMessage('Query Error');    { 线程异常 }
      end;
    end;{ 线程查询类的构造器 }
    constructor TThreadQuery.Create(Query: TQuery; DataSource: TDataSource);
    begin
      FQuery := Query;
      FDataSource := DataSource;
      inherited Create(True);
      FreeOnTerminate := False;
    end;{ 创建窗体时创建线程查询对象 }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Q1 := TThreadQuery.Create(Query1, DataSource1);
      Q2 := TThreadQuery.Create(Query2, DataSource2);
    end;{ 销毁窗体时销毁线程查询对象 }
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Q1.Terminate; { 销毁之前终止线程执行 }
      Q1.Destroy;
      Q2.Terminate; { 销毁之前终止线程执行 }
      Q2.Destroy;
    end;{ 开始线程、继续执行线程、挂起线程 }
    procedure TForm1.BtnGoPauseClick(Sender: TObject);
    begin
      if Q1.Suspended then Q1.Resume else Q1.Suspend;
      if Q2.Suspended then Q2.Resume else Q2.Suspend;
    end;end.
     
     
          
     
     
      

  4.   

    if not SocketServer的话
    每次创建一个线程,就将线程加1, 释放时就减1.if SocketServer 的话
    可用函数:Thread.ServerSocket.ActiveThreads和Thread.ServerSocket.IdleThreads来取得正在运行的线程数。
      

  5.   

    如果说不能得到有哪几个线程存在,那么flashget下载时,你点击停止它是怎么实现全部线程挂起呢?说通俗一点就是,一个类的几个实例的问题?
    up
      

  6.   

    TThread.execute//写出线程需要完成的代码
    TThread.Terminate方法//终止线程!
    有问题请发信息到我的E-mail:[email protected]
      

  7.   

    怎样终止线程,上面已经有兄弟说到了。不够的,再看看帮助吧至于要知道自己的几个线程类的实例在运行,一般都要自己记录下来,每创建,运行一个或终止一个都记下来。也有枚举线程的API函数,不过一者,枚举到的不一定都是你的线程类的实例的句柄,二者,
    效率低下。还是自己纪录一下好,简单,方便,快捷
      

  8.   

    采用信号灯技术
    线程创建时信号量+1
    Free的时候信号量-1
    信号量置为-1时,所有线程停止这需要线程定时检查信号量的值主线程控制信号量,这方法可以实现NetANts/FlashGet等多线程的功能
    最大线程数目也可以通过信号量控制的
      

  9.   

    在创建线程时先声明一个线程对象,你利用这个对象就可以执行terminated方法了。
    要知道创建的线程个数,利用线程类数组或线程池就可以实现了,具体例子我可以写一个给你,但是现在手头没有,呵呵!