![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Очень нужна помощь.
Вот задание: Написать программу, реализующую многопоточное вычисление числа πи по приближенному алгоритму: Пи/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; Выдает нулевой результат, где косяк? |
#2
|
||||
|
||||
![]() обязательно много поточно? у меня есть своя прога считающая PI, если надо могу сорцы дать
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#3
|
|||
|
|||
![]() Да, нужна именно многопоточная. Без потоков даже я напишу)
|
#4
|
||||
|
||||
![]() Цитата:
и вообще, какой смысл от 5 потоков, если нет такого процессора? скорости от этого не прибавится TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; Последний раз редактировалось AleD, 07.12.2009 в 10:56. |
#5
|
|||
|
|||
![]() Задание у меня такое
|