很急的一个问题 面试时遇到的。对于分布式应用程序,数据库,应用程序端,客户端。现在要求编一个简单的应用程序,体现这样的思想:对于不同的客户访问,假设为A,B,C,D四个客户的同时访问,这个应用程序要能分别给这四个客户一个访问的线程。小弟没有涉足过多线程的编程 现在一点思路也没有 那位大哥能够指点?:)
或者有什么源程序参考的。多谢了 分数不够可以再加。

解决方案 »

  1.   

    Delphi有个自带例子: 
    \Program Files\Borland\Delphi6\Help\Examples\Prgrsbar
      

  2.   

    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; 
      

  3.   

    多线程(初级含代码)  
    yhjdelphi
    摘 要:多线程的学习实例
    关键字:多线程
    类 别:API
     
     
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, StdCtrls,syncobjs;
    type//创建读线程类
     TReadThread = class(TThread)
      private
       procedure Update;
      protected
       procedure Execute;override;
    end;
    //////////////////////////////////////////////////////////
    type//创建显示线程类
      TdisplayThread=class(TThread)
       private
        procedure Update;
       protected
        procedure Execute;override;
    end;
    //////////////////////////////////////////////////////////
    type ////创建主窗口
      TForm1 = class(TForm)
        Memo1: TMemo;
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        procedure N4Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure N3Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        ReadThread:TReadThread;
        Displaythread:TdisplayThread;
        ReadEvent:TEvent;
        DisplayEvent:TEvent;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.N4Click(Sender: TObject);
    begin
      Close();
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
     ReadEvent:=TEvent.Create(nil,true,false,'readthread');
     readevent.ResetEvent; //创建读线程并且设置无信号状态 DisplayEvent:=Tevent.Create(nil,true,true,'displaythread');
     displayEvent.SetEvent;//创建显示线程并且设置有信号状态
     //创建线程
     ReadThread:=TReadThread.Create(true);
     readthread.FreeOnTerminate:=false;
     Displaythread:=TdisplayThread.Create(true);
     displaythread.FreeOnTerminate:=false;
     end;procedure TForm1.N3Click(Sender: TObject);
    begin
     ReadThread.Suspend;
     Displaythread.suspend;
    end;procedure TForm1.N2Click(Sender: TObject);
    begin
     Memo1.Clear;
     ReadThread.Resume;
     Displaythread.Resume;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
       ReadThread.Free;
       Displaythread.Free;
       ReadEvent.Free;
       DisplayEvent.Free;
    end;{ TReadThread }procedure TReadThread.Execute;
    begin
      inherited;
      while Form1.DisplayEvent.WaitFor(1000)=wrsignaled do
      begin
         if terminated then exit;
         Form1.Displayevent.ResetEvent;
         Synchronize(update);
         form1.ReadEvent.SetEvent;
      end;end;procedure TReadThread.Update;
    begin
      Form1.Memo1.Lines.Append('正在执行::读线程');
    end;{ TdisplayThread }procedure TdisplayThread.Execute;
    begin
      inherited;
      while Form1.ReadEvent.WaitFor(1000)= wrsignaled do
      begin
        if terminated then exit;
        Form1.ReadEvent.ResetEvent();//设置读事件无信息状态
        Synchronize(update);
        Form1.DisplayEvent.SetEvent;
      end;end;procedure TdisplayThread.Update;
    begin
     Form1.Memo1.Lines.Append('正在执行::显示线程');
    end;end.