delphi的多线程实现和线程与进程的关系说明

做了个多线程的测试Demo
    unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
lbl1: TLabel;
btn1: TButton;
btn2: TButton;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
  private
{ Private declarations }
 th: TMyTestThread;
  public
{ Public declarations }
  end;

var
  Form1: TForm1;

implementation
//uses
//Unit2;
{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
//False是创建一个可执行的 线程,True是创建一个挂起的线程
  th := TMyTestThread.Create(False);

end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  PostThreadMessage(th.ThreadID, PWM_COMMWRITE, 0, 0);
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  PostThreadMessage(th.ThreadID, PWM_TEST1, 0, 0);
end;

end.
//===================第二个单元代码==========================
unit Unit2;

interface

uses
  Classes,Windows, Messages, SysUtils;
const
//自定义消息只能比WM_USWER大,如果小就是系统消息了
  PWM_COMMWRITE = WM_USER+1;
  PWM_TEST1 = WM_USER + 2;

type
  TMyTestThread = class(TThread)
  private
{ Private declarations }
counter : integer;
  protected
procedure Execute; override;
procedure UpdateUI();
  end;

implementation

uses Unit1;

{ TMyTestThread }
procedure TMyTestThread.UpdateUI();
begin
  Form1.lbl1.Caption := ‘Updated‘ + IntToStr(counter);
end;
procedure TMyTestThread.Execute;
var
  i : integer;
  msg:   TMsg;
begin
  { Place thread code here }
  while True do
  begin
if GetMessage( msg, 0, 0, 0) = False then
begin
  break;
end;

if msg.hwnd <> 0{NULL} then
begin
  TranslateMessage(msg);
  DispatchMessage(msg);
  Continue;
end;

// Handle the message.
case msg.message of
  PWM_COMMWRITE:  // New string to write to Comm port.
  begin
    for i := 0 to 10 do
    begin
      Sleep(100);
    end;
  end;

  PWM_TEST1:
  begin
    counter := counter + 1;
    Synchronize(UpdateUI);
  end;
end;
  end;
end;

end.

线程是指进程内的一个执行单元,也是进程内的可调度实体.

与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

4)二者均可并发执行.

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

时间: 2024-11-09 00:29:57

delphi的多线程实现和线程与进程的关系说明的相关文章

三层架构介绍及线程与进程的关系

1.初识三层架构(其实就是吧同种类的全部放到一起) 1).用户交互 2).逻辑处理 3).数据存储 2.多线程与多进程 进程:是操作系统自己派生出来的. 线程:是由进程派生出来的. 1)一个程序至少有一个进程,一个进程至少有一个线程. 2) 线程的划分尺度小于进程,使得多线程程序的并发性高. 3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 4) 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

线程和进程的关系

在多个CPU的主机上,线程是可以同时执行的. 多线程对于多进程的优点: 1.在多进程的情况下,每个进程都有自己的地址空间.而在多线程情况下,同一进程内的线程共享进程的地址空间, 因此,创建一个新的进程要耗费时间来为其分配系统资源,而创建一个新的线程花费的时间要少得多. 2.在系统调度方面,由于进程拥有独立的地址空间,而线程共享地址空间.线程的切换速度要远远快过进程间的切换速度. 3.在通信机制方面,进程间的数据空间相互独立,彼此通信要以专门的方式进行通信,通信时必须要经过操作系统.同一进程内的线

线程与进程的关系

概述 进程是资源分配的基本单位,进程由线程组成. 线程是系统执行调度的基本单位,线程隶属于进程. 为何引入线程 1.进程在同一时间只能干一件事,比如我们在上课的时候,往往要耳朵听课,手记笔记,脑子思考,如果套用进程的机制,那么我们听课的时候也不能记录笔记,更不能思考. 2.当进程某个操作阻塞时,整个进程就会挂起,也就是说当老师讲课时需要思考的时候,我们也还只能听课,不能思考也不能记录笔记 线程与进程的区别 1.进程是资源分配的基本单位,线程是系统执行调度的基本单位 2.每个进程都有独立的内存地址

Delphi 实现多线程编程的线程类 TThread

http://blog.csdn.net/henreash/article/details/3183119 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到, 但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了. 然而这并不是多线程编程的全部,我写此文的目的在于对此作一个补充. 线程本质上是进程中一段并发运行的代码. 一个进程至少有一个线程,即所谓的主线程. 同时还可以有多个

线程、进程、多线程、多进程

http://blog.csdn.net/lishenglong666/article/details/8557215 线程进程的联系和区别 定义: 进程是程序在计算机上的一次执行活动,是系统进行资源分配和调度的一个独立单位:  线程是进程的一个实体,是cpu调度和分派的基本单位,他是比进程更小的能独立运行的基本单位:线程自己基本上不拥有系统资源,只用有点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程: 线程与进程的关系: 1)     一个线程只能属于

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

线程 ,进程和协程

一.线程(目的提高执行效率) 计算机中执行任务的最小单元 优点:共享内存,IO操作的时候,创造并发操作 缺点:抢占资源 二.进程(提高执行效率) 进程就是一个程序在一个数据集上的一次动态执行过程 优点:同时利用多个CPU,能够同时进行多个操作 缺点:消耗资源(重新开辟内存空间) 三.线程和进程的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与 属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身

线程与进程极其区别

1.进程和线程 1.1 概述: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 相对进程而言,线程是一个更加接近于执

Python_oldboy_自动化运维之路_线程,进程,协程(十一)

本节内容: 线程 进程 协程 IO多路复用 自定义异步非阻塞的框架 线程和进程的介绍: 举个例子,拿甄嬛传举列线程和进程的关系: 总结:1.工作最小单元是线程,进程说白了就是提供资源的 2.一个应用程序至少有一个进程,一个进程里至少有一个线程 3.应用场景:io密集型适合用多线程,计算密集型(cpu)适合用多进程 4.GIL:全局解释器锁,作用:保证同一个进程中只能有一个线程同时被调用 5.python的一个诟病:前提是被cpu调度,因为有GIL,一个应用只有一个进程,纵容有多个线程,也体现不出