delphi的多线程实现和线程与进程的关系说明
2015-04-05 11:41
281 查看
做了个多线程的测试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调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
相关文章推荐
- 多线程实现闹钟功能以及主线程与子线程的关系说明
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- 线程进程Java多线程(一)、理解进程与多线程的概念及关系
- 多线程之进程、线程与多线程文字滚动的实现
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 进程,主线程,异步线程,多线程和runloop的作用和关系
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 多线程1-线程和进程的实现
- 多线程切换以及线程进程之间关系
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 进程 & 线程的区别、实现多线程、线程的生命周期
- Delphi中多线程用Synchronize实现VCL数据同步显示 解决在线程中操作控件出现问题
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 进程和线程的关系,同时如何使用Java实现
- JAVA基础初探(十四)多线程(线程与进程概述、线程的实现、状态、常用方法、优先级、生命周期)
- 多线程切换以及线程进程之间关系
- 多线程实现生产者消费者模型,以及线程和进程的回顾
- 14-08-07 关于程序、进程、线程,以及python中实现多线程的办法