Advertisement
dridi4336

Using threads

Mar 30th, 2015
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.28 KB | None | 0 0
  1. DESCRIPTION
  2. This small, simple program that colors the screen in red, yellow, blue and displays the even and odd numbers for understanding the use and benefit of threeads.
  3. **********************************************************
  4. download link the entire project : http://fit.sh/gPm
  5. ************************************************************
  6. SOURCE / EXAMPLE:
  7. 3 fichiers .pas.
  8.  
  9. unit UCalculPair;
  10.  
  11. interface
  12.  
  13. uses
  14.   Classes, SysUtils, StdCtrls;
  15.  
  16. type
  17.   TCalculPairThread = class(TThread)
  18.   private
  19.     { Déclarations privées }
  20.     NbCalcul: integer;
  21.     ListBoxDest : TListBox;
  22.     LabelNumCourDest : TLabel;
  23.   protected
  24.     procedure Execute; override;
  25.     procedure paint;
  26.   public
  27.     constructor Create (LabelPair: TLabel; ListBoxPair : TListBox);
  28.   end;
  29.  
  30. implementation
  31.     constructor TCalculPairThread.Create (LabelPair: TLabel; ListBoxPair : TListBox);
  32. begin
  33.    inherited create(False);
  34.     NbCalcul := 0;
  35.     ListBoxDest := ListBoxPair;
  36.     LabelNumCourDest := LabelPair;
  37. end;
  38.  
  39. { Important : Les méthodes et propriétés des objets des VCL ne peuvent être
  40.   utilisées que dans des méthodes appelées avec Synchronize; par exemple :
  41.  
  42.       Synchronize(UpdateCaption);
  43.  
  44.   et UpdateCaption pourrait être :
  45.  
  46.     procedure TCalculPairThread.UpdateCaption;
  47.     begin
  48.       Form1.Caption := 'Mise à jour dans un thread';
  49.     end; }
  50.  
  51. { TCalculPairThread }
  52.  
  53. procedure TCalculPairThread.Execute;
  54. begin
  55.   { Placez le code du thread ici }
  56.    while not terminated do
  57.    begin
  58.    NbCalcul := nbCalcul +1;
  59.    Synchronize (paint);
  60.    end;
  61. end;
  62.  
  63. procedure TCalculPairThread.paint;
  64. Begin
  65. LabelNumCourDest.caption:=IntToStr(NbCalcul);
  66. if (NbCalcul mod 2)=0 then
  67.    ListBoxDest.items.add(IntToStr(NbCalcul));
  68. End;
  69. end.
  70.  
  71. -----------------------------------------------------------------------------------------------
  72.  
  73. unit UDessineThread;
  74.  
  75. interface
  76.  
  77. uses
  78.   Classes, Graphics, SysUtils, StdCtrls;
  79.  
  80. type
  81.   TDessineThread = class(TThread)
  82.   private
  83.     { Déclarations privées }
  84.     m_iCouleur : integer;
  85.     m_Label : TLabel;
  86.     m_iCompteur : double;
  87.  
  88.   protected
  89.     procedure Execute; override;
  90.     procedure paint;
  91.  
  92.   public
  93.     constructor Create (iCouleur: integer; LabelCompteur: TLabel);
  94.   end;
  95.  
  96. implementation
  97. uses UThreads;
  98.   constructor TDessineThread.Create (iCouleur: integer; LabelCompteur: TLabel);
  99. begin
  100.     inherited Create(False); // False pour lancer l'éxécution
  101.     m_iCouleur:=iCouleur;
  102.     m_Label:=LabelCompteur;
  103.     m_iCompteur:=0;
  104. end;
  105.  
  106. { Important : Les méthodes et propriétés des objets des VCL ne peuvent être
  107.   utilisées que dans des méthodes appelées avec Synchronize; par exemple :
  108.  
  109.       Synchronize(UpdateCaption);
  110.  
  111.   et UpdateCaption pourrait être :
  112.  
  113.     procedure TDessineThread.UpdateCaption;
  114.     begin
  115.       Form1.Caption := 'Mise à jour dans un thread';
  116.     end; }
  117.  
  118. { TDessineThread }
  119.  
  120. procedure TDessineThread.Execute;
  121. begin
  122.   { Placez le code du thread ici }
  123.   Randomize;
  124.   while not Terminated do
  125.         begin
  126.         m_iCompteur:=m_iCompteur+1;
  127.         Synchronize (paint);
  128.         end;
  129. end;
  130.  
  131. procedure TdessineThread.paint;
  132. begin
  133.   Form1.Canvas.Pixels[random(Form1.Width), random(Form1.Height)]:=m_iCouleur;
  134.   m_Label.Caption:=FloatToStr(m_iCompteur);
  135.   end;
  136. end.
  137.  
  138. -----------------------------------------------------------------------------------------------
  139.  
  140. unit Uthreads;
  141.  
  142. interface
  143.  
  144. uses
  145.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  146.   StdCtrls, Buttons, ComCtrls,UDessineThread, UCalculPair;
  147.  
  148. type
  149.   TForm1 = class(TForm)
  150.     Btnstartrouge: TBitBtn;
  151.     Btnstoprouge: TBitBtn;
  152.     Btnstartjaune: TBitBtn;
  153.     Btnstopjaune: TBitBtn;
  154.     Btnstartbleu: TBitBtn;
  155.     Btnstopbleu: TBitBtn;
  156.     TBRouge: TTrackBar;
  157.     TBJaune: TTrackBar;
  158.     TBBleue: TTrackBar;
  159.     Labelrouge: TLabel;
  160.     Labeljaune: TLabel;
  161.     Labelbleue: TLabel;
  162.     BtnSuspendPair: TButton;
  163.     BtnResumePair: TButton;
  164.     BtnStartPair: TButton;
  165.     BtnStopPair: TButton;
  166.     TBpair: TTrackBar;
  167.     ListBoxPair: TListBox;
  168.     LabelPair: TLabel;
  169.     procedure BtnstartrougeClick(Sender: TObject);
  170.     procedure BtnstartjauneClick(Sender: TObject);
  171.     procedure BtnstartbleuClick(Sender: TObject);
  172.     procedure BtnstoprougeClick(Sender: TObject);
  173.     procedure BtnstopjauneClick(Sender: TObject);
  174.     procedure BtnstopbleuClick(Sender: TObject);
  175.     procedure TBRougeChange(Sender: TObject);
  176.     procedure TBJauneChange(Sender: TObject);
  177.     procedure TBBleueChange(Sender: TObject);
  178.     procedure BtnStartPairClick(Sender: TObject);
  179.     procedure BtnStopPairClick(Sender: TObject);
  180.     procedure TBpairChange(Sender: TObject);
  181.     procedure BtnSuspendPairClick(Sender: TObject);
  182.     procedure BtnResumePairClick(Sender: TObject);
  183.   private
  184.     { Déclarations privées }
  185.     DessineThreadRouge: TDessineThread;
  186.     DessineThreadJaune: TDessineThread;
  187.     DessineThreadBleue: TDessineThread;
  188.     PairThread: TCalCulPairThread;
  189.   public
  190.     { Déclarations publiques }
  191.  
  192.   end;
  193.  
  194. var
  195.   Form1: TForm1;
  196.  
  197. implementation
  198. {$R *.DFM}
  199.  
  200. procedure TForm1.BtnstartrougeClick(Sender: TObject);
  201. begin
  202. Btnstartrouge.Enabled:=False;
  203. Btnstoprouge.Enabled:=True;
  204. DessineThreadRouge:=TDessineThread.Create(clRed, Labelrouge);
  205.  
  206. end;
  207.  
  208. procedure TForm1.BtnstartjauneClick(Sender: TObject);
  209. begin
  210. Btnstartjaune.Enabled:=False;
  211. Btnstopjaune.Enabled:=True;
  212. DessineThreadJaune:=TDessineThread.Create(clYellow, Labeljaune);
  213.  
  214. end;
  215.  
  216. procedure TForm1.BtnstartbleuClick(Sender: TObject);
  217. begin
  218. Btnstartbleu.Enabled:=False;
  219. Btnstopbleu.Enabled:=True;
  220. DessineThreadBleue:=TDessineThread.Create(clBlue, Labelbleue);
  221.  
  222. end;
  223.  
  224. procedure TForm1.BtnstoprougeClick(Sender: TObject);
  225. begin
  226. Btnstartrouge.Enabled:=true;
  227. Btnstoprouge.Enabled:=False;
  228. DessineThreadRouge.Free;
  229.  
  230. end;
  231.  
  232. procedure TForm1.BtnstopjauneClick(Sender: TObject);
  233. begin
  234. Btnstartjaune.Enabled:=true;
  235. Btnstopjaune.Enabled:=False;
  236. DessineThreadJaune.Free;
  237.  
  238. end;
  239.  
  240. procedure TForm1.BtnstopbleuClick(Sender: TObject);
  241. begin
  242. Btnstartbleu.Enabled:=true;
  243. Btnstopbleu.Enabled:=False;
  244. DessineThreadBleue.Free;
  245.  
  246. end;
  247.  
  248. procedure TForm1.TBRougeChange(Sender: TObject);
  249. begin
  250. if DessineThreadRouge <> nil then
  251.    DessineThreadRouge.Priority:=TThreadPriority(TBRouge.Position);
  252. end;
  253.  
  254. procedure TForm1.TBJauneChange(Sender: TObject);
  255. begin
  256. if DessineThreadJaune <> nil then
  257.    DessineThreadJaune.Priority:=TThreadPriority(TBJaune.Position);
  258. end;
  259.  
  260. procedure TForm1.TBBleueChange(Sender: TObject);
  261. begin
  262. if DessineThreadBleue <> nil then
  263.    DessineThreadBleue.Priority:=TThreadPriority(TBBleue.Position);
  264. end;
  265.  
  266. procedure TForm1.BtnStartPairClick(Sender: TObject);
  267. begin
  268. ListBoxPair.clear;
  269. BtnStartPair.Enabled:=False;
  270. BtnStopbleu.Enabled:=True;
  271. PairThread := TCalCulPairThread.create(LabelPair, ListBoxPair);
  272. end;
  273.  
  274. procedure TForm1.BtnStopPairClick(Sender: TObject);
  275. begin
  276. ListBoxPair.clear;
  277. BtnStartPair.Enabled:=True;
  278. BtnStopbleu.Enabled:=False;
  279. PairThread.free;
  280.  
  281. end;
  282.  
  283. procedure TForm1.TBpairChange(Sender: TObject);
  284. begin
  285. if PairThread <> nil then
  286.    PairThread.Priority:=TThreadPriority(TBPair.Position);
  287.  
  288. end;
  289.  
  290. procedure TForm1.BtnSuspendPairClick(Sender: TObject);
  291. begin
  292. PairThread.Suspend;
  293. end;
  294.  
  295. procedure TForm1.BtnResumePairClick(Sender: TObject);
  296. begin
  297. PairThread.Resume;
  298. end;
  299.  
  300. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement