Очень нужна помощь.
Вот задание:
Написать программу, реализующую многопоточное вычисление числа πи по приближенному алгоритму:
Пи/4=1-1/3+1/5-1/7... с некоторой точностью ε .
Определить и построить зависимость времени расчетов от числа потоков (1, 2, 4, 8,
16 потоков). При данном числе потоков произвести несколько запусков
программы, сравнить результаты, объяснить несоответствие результатов.
Код:
var Pi: real;
eps: cardinal;
N: integer;
Id: integer;
FLock : TRTLCriticalSection;
gIndex : integer;
gIndexSave : integer;
function TForm1.X(Param :pointer):real;
var i: integer;
begin
EnterCriticalSection(FLock);
Result:=0;
i:=Id;
while i<=Eps do
Result:=(Power(-1, i+1)*4)/(2*i-1);
i:=i+N;
LeaveCriticalSection(FLock);
Pi:=Pi+Result;
EndThread(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: cardinal;
Thr:array[1..16] of cardinal;
ThreadID: LongWord;
const a=1;
begin
Pi:=0;
for i:=1 to 16 do
Thr[i]:=0;
Eps:=StrToInt(Edit1.Text);
if RadioButton1.Checked then
N:=1;
if RadioButton2.Checked then
N:=2;
if RadioButton3.Checked then
N:=3;
if RadioButton4.Checked then
N:=4;
if RadioButton5.Checked then
N:=5;
InitializeCriticalSection(FLock);
for i:=1 to N do
begin
Id:=i;
Thr[i]:=BeginThread(nil, 0, @TForm1.X, nil, 0, ThreadID);
end;
for i:=1 to 16 do
begin
CloseHandle(Thr[i]);
end;
Edit2.Text:=FloatToStr(Pi);
end;
Выдает нулевой результат, где косяк?