1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| //мы будем сравнитьвать backrounderworker и простой thread
{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}
{$apptype windows}
uses
system.windows.forms, System.Drawing,system.Threading,System.Diagnostics;
var f:form;
b1,b2:Button;
bw,bw1:system.componentmodel.BackgroundWorker;
thd:Thread;
count:PerformanceCounter;
///процедура что бы занять поток хоть какойто работай
procedure permnMatrix();
var ar1,ar2,r:array[1..8000,1..8000] of integer;
i,j:integer;
begin
for i:=1 to 8000 do
begin
for j:=1 to 8000 do
begin
ar1[i,j]:=Random(100000);
ar2[i,j]:=Random(100000);
R[i,j]:=ar1[i,j]*ar2[i,j];
end;
end;
end;
procedure zagrproc(sender:object;E:system.componentmodel.doworkeventargs);
begin
count:=new PerformanceCounter('Процессор', '% загруженности процессора', '_Total');//получаем нагрузку на цп
repeat
f.Text:='нагрузка на цп '+Round(system.Convert.ToInt32(count.NextValue)).ToString;
Sleep(600);
until false;
end;
procedure pern(sender:object;E:system.componentmodel.doworkeventargs);
begin
b2.Enabled:=false;
b1.Enabled:=false;
MillisecondsDelta;
permnMatrix;
Messagebox.Show('прошло '+(MillisecondsDelta/1000).ToString+' секунд');
b2.Enabled:=true;
b1.Enabled:=true;
end;
procedure thdBack();
begin
b2.Enabled:=false;
b1.Enabled:=false;
MillisecondsDelta;
permnMatrix;
Messagebox.Show('прошло '+(MillisecondsDelta/1000).ToString+' секунд');
b2.Enabled:=true;
b1.Enabled:=true;
end;
procedure b1cl(sender:object;E:system.EventArgs);
begin
bw.RunWorkerAsync;
end;
procedure b2cl(sender:object;E:system.EventArgs);
begin
thd.Start;//да к сожелению тут генирирутся ошибка при повторном запуске
end;
begin
f:=new Form();
F.Size:=new System.Drawing.Size(244,89);
F.MaximizeBox:=false;
f.MinimizeBox:=false;
f.FormBorderStyle:=system.windows.forms.FormBorderStyle.Fixed3D;
f.Text:='загрузка...';
b1:=new Button;
b1.Size:=new System.Drawing.Size(115,50);
b1.Text:='BackrounderWorker';
b1.Click+=b1cl;
b2:=new Button;
b2.Size:=new System.Drawing.Size(115,50);
b2.Text:='Simple Thread';
b2.Location:=new system.drawing.Point(119);
b2.Click+=b2cl;
bw1:=new System.ComponentModel.BackgroundWorker();
bw1.DoWork+=zagrproc;
bw1.RunWorkerAsync;
bw:=new System.ComponentModel.BackgroundWorker;
bw.DoWork+=pern;
thd:=new Thread(thdback);
F.Controls.Add(b1);
F.Controls.Add(b2);
F.ShowDialog;
end. |