进程,线程是一对很容易搞糊涂的概念,以前我对此概念很清楚,但最近又模糊了希望哪位大虾能彻底把  进程,线程  讲清楚
最好还能举出了一些在实际的开发中例子了

解决方案 »

  1.   

    我也说两句(刚学的)
    进程是由至少一个线程组成的。线程才是获得cpu时间片的最小单位。
    用线程技术编程不是程序员必会的,但会用线程编程才称得上是好的程序员。
    我有例程 要的话 可以发给你。
      

  2.   

    在DELPHI的数据库开发中,如何来运用线层,有无了实际例子啦
      

  3.   

    再补充一点:把商店消失(CTRL+ALT+DEL)了,那么所有的进程都被强制结束了。
    如果所有的线程都执行完毕并且某个线程负责销毁商店,那么表示进程正常结束。
      

  4.   

    至于数据库中使用多线程,俺的建议是需要合理规划,否则很容易发生数据访问冲突。俺有一个例子,供楼主参考(原版CCIDNET,不好意思,俺的原创):
    http://lzw222.myrice.com/3-SeverJiShu/Sever_wz/sever49.htm
      

  5.   

    就像一座正在下课的教学楼。教学楼只有一个大门,这就是cup,假设每次只能出来一个人。
    每个教室都有自己的门,这就是进程。
    每个教室有很多学生(可能是1个,或多个),都要出来,假设也是一个一个得出来。////////////////////////////操作系统+应用程序就是这个挤满学生,都想出来的大楼。cpu同一时刻只能处理一条指令,就像教学楼大门同时只能出去一个人,一个人就是一条指令。先后从楼大门出去的学生不一定是哪个教室的,只要他能挤,这就是优先级高。当某个学生在门口处因为等自己的女朋友不愿意除去,又不能回头的时候,别人谁也别想出去,就是死锁。当学生走差不多的时候,大门比较轻松,这是候cpu的占用率较低。
    当然,大楼着火,只有一个楼门,防火设备不好使,学生只能从窗户跳下。
    这就是操作系统崩溃!
      

  6.   

    http://lzw222.myrice.com/3-SeverJiShu/Sever_wz/sever49.htm
      

  7.   

    给你一个小例子:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, DBTables, Db, Grids, DBGrids,threadsql;type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        DBGrid2: TDBGrid;
        DataSource1: TDataSource;
        DataSource2: TDataSource;
        Query1: TQuery;
        Query2: TQuery;
        Database1: TDatabase;
        Database2: TDatabase;
        Session1: TSession;
        Session2: TSession;
        Button1: TButton;
        Table1: TTable;
        Database3: TDatabase;
        Session3: TSession;
        DataSource3: TDataSource;
        DBGrid3: TDBGrid;
        Button2: TButton;
        Edit1: TEdit;
        Button3: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
    Form1: TForm1;
    Q1, { 线程查询对象1 }
    Q2: TThreadQuery; { 线程查询对象2 }implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
    Q1 := TThreadQuery.Create(table1, Query1, DataSource1);
    Q2 := TThreadQuery.Create(table1, Query2, DataSource2);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Q1.Terminate; { 销毁之前终止线程执行 }
    Q1.Destroy;
    Q2.Terminate; { 销毁之前终止线程执行 }
    Q2.Destroy;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    //if Q1.Suspended then Q1.Resume else Q1.Suspend;
    //if Q2.Suspended then Q2.Resume else Q2.Suspend;
    Q1.Resume;
    Q2.Resume;
    application.ProcessMessages;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    DataSource3.DataSet := Table1;
    Table1.Active := True;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    var
      i,v : integer;
    begin
      v := 1;
      for i := 1 to 100 do begin
        inc(v);
      end;
      Edit1.Text := inttostr(i);
    end;end.
      

  8.   

    线程unit:
    unit threadsql;interfaceuses
      Classes,db,DbTables,Dialogs;type
      TThreadQuery = class(TThread)
    private
    FTable : TTable;
    FQuery: TQuery; { 线程中的查询组件 }
    FDataSource: TDataSource; { 与查询组件相关的数据感知组件 }
    procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
    protected
    procedure Execute; override;{ 执行线程的方法 }
    public
    constructor Create(table : TTable;Query: TQuery;DataSource: TDataSource); virtual; { 线程构造器 }
    end;implementation{ Important: Methods and properties of objects in VCL can only be used in a
      method called using Synchronize, for example,      Synchronize(UpdateCaption);  and UpdateCaption could look like,    procedure TThreadQuery.UpdateCaption;
        begin
          Form1.Caption := 'Updated in a thread';
        end; }{ TThreadQuery }
    { TThreadQuery类的实现 }{ 连接数据查询组件和数据感知组件}
    procedure TThreadQuery.ConnectDataSource;
    begin
    FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 }
    end;
    procedure TThreadQuery.Execute;{ 执行线程的方法 }
    begin
    try
    Synchronize(ConnectDataSource);{ 线程同步 }
    except
    ShowMessage('Query Error'); { 线程异常 }
    end;
    end;{ 线程查询类的构造器 }
    constructor TThreadQuery.Create(Table: TTable; Query: TQuery; DataSource: TDataSource);
    begin
    FQuery := Query;
    FTable := table;
    FDataSource := DataSource;
    inherited Create(True);
    FreeOnTerminate := False;
    end;end.