哎,Csdn挺需要你这样的热心人,我等到花儿谢了由开都没人气,再过5分钟结账

解决方案 »

  1.   


    3.多client ,socket服务程序
      

  2.   

    例子多的是,来一个
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls;type
      TLabelCounterThread = Class (TThread)
        private
        { Private declarations }
          FLabel:TLabel;
          FNumber:integer;
          FIdx:integer;
          Procedure RefreshLabel;
        protected
          Procedure Execute;Override;
        public
        { Public declarations }
          Constructor Create(lbl:TLabel;num:integer);
      end;  TListCounterThread = Class (TThread)
        private
        { Private declarations }
          FList:TListBox;
          FNumber:integer;
          Fidx:integer;
          Procedure ClearList;
          Procedure RefreshList;    Protected
          Procedure Execute;Override;    public
        { Public declarations }
          Constructor Create(lst:TListBox;num:integer);
      end;
      TfrmMain = class(TForm)
        cmdThread1: TButton;
        cmdThread2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        cmdKillThread1: TButton;
        cmdKillThread2: TButton;
        ListBox1: TListBox;
        cmdThread3: TButton;
        cmdKillThread3: TButton;
        procedure cmdThread1Click(Sender: TObject);
        procedure cmdThread2Click(Sender: TObject);
        procedure cmdKillThread1Click(Sender: TObject);
        procedure cmdKillThread2Click(Sender: TObject);
        procedure cmdThread3Click(Sender: TObject);
        procedure cmdKillThread3Click(Sender: TObject);
      private
        { Private declarations }
        Procedure Thread1Done(Sender : TObject);
        Procedure Thread2Done(Sender : TObject);
        Procedure Thread3Done(Sender : TObject);
      public
        { Public declarations }
        Test1,Test2:TLabelCounterThread;
        Test3:TListCounterThread;
      end;var
      frmMain: TfrmMain;implementation{$R *.DFM}
    Constructor TLabelCounterThread.Create(lbl:TLabel;num:integer);
    begin
         inherited Create(False);
         FNumber:=num;
         if FNumber>10000 then FNumber:=10000;
         if FNumber<1 Then FNumber:=1;
         FLabel:=lbl;
         FreeOnTerminate:=True;
    end;Procedure TLabelCounterThread.RefreshLabel;
    begin
         FLabel.Caption:=IntToStr(Fidx);
    end;Procedure TLabelCounterThread.Execute;
    var
       idx:integer;
    begin
         for idx:=1 to FNumber do begin
             Fidx:=idx;
             synchronize(RefreshLabel);
             if Terminated then Exit;
         end;
    end;Constructor TListCounterThread.Create(lst:TListBox;num:integer);
    begin
         inherited Create(False);
         FNumber:=num;
         if FNumber>10000 then FNumber:=10000;
         if FNumber<1 Then FNumber:=1;
         Flist:=lst;
         FreeOnTerminate:=True;
    end;Procedure TListCounterThread.ClearList;
    begin
         FList.Items.Clear;
    end;Procedure TListCounterThread.RefreshList;
    begin
         FList.Items.Add (IntToStr(Fidx));
    end;Procedure TListCounterThread.Execute;
    var
       idx:integer;
    begin
         synchronize(ClearList);
         for idx:=1 to FNumber do begin
             Fidx:=idx;
             synchronize(RefreshList);
             if Terminated then Exit;
         end;
    end;procedure TfrmMain.cmdThread1Click(Sender: TObject);
    begin
         cmdThread1.Enabled:=False;
         cmdKillThread1.Enabled:=True;
         test1:=TLabelCounterThread.Create(frmMain.Label1,10000);
         test1.OnTerminate:=Thread1Done;
    end;Procedure TfrmMain.Thread1Done;
    begin
         cmdKillThread1.Enabled:=False;
         cmdThread1.Enabled:=True;
    end;Procedure TfrmMain.Thread2Done;
    begin
         cmdKillThread2.Enabled:=False;
         cmdThread2.Enabled:=True;
    end;Procedure TfrmMain.Thread3Done;
    begin
         cmdKillThread3.Enabled:=False;
         cmdThread3.Enabled:=True;
    end;procedure TfrmMain.cmdThread2Click(Sender: TObject);
    begin
         cmdThread2.Enabled:=False;
         cmdKillThread2.Enabled:=True;
         test2:=TLabelCounterThread.Create(frmMain.Label2,10000);
         test2.OnTerminate:=Thread2Done;
    end;procedure TfrmMain.cmdKillThread1Click(Sender: TObject);
    begin
         Test1.Terminate;
    end;procedure TfrmMain.cmdKillThread2Click(Sender: TObject);
    begin
         Test2.Terminate;
    end;procedure TfrmMain.cmdThread3Click(Sender: TObject);
    begin
         cmdThread3.Enabled:=False;
         cmdKillThread3.Enabled:=True;
         test3:=TListCounterThread.Create(frmMain.ListBox1,10000);
         test3.OnTerminate:=Thread3Done;
    end;procedure TfrmMain.cmdKillThread3Click(Sender: TObject);
    begin
         Test3.Terminate;
    end;end.
      

  3.   

    To acidcoffee_fzq(鞭炮):
       能举出我没给问题的例子吗?