Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2009, 00:15
Novasty Novasty вне форума
Прохожий
 
Регистрация: 07.12.2009
Сообщения: 3
Репутация: 10
По умолчанию Многопоточное вычисление числа Пи

Очень нужна помощь.
Вот задание:
Написать программу, реализующую многопоточное вычисление числа πи по приближенному алгоритму:
Пи/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  
Старый 07.12.2009, 07:46
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

обязательно много поточно? у меня есть своя прога считающая PI, если надо могу сорцы дать
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #3  
Старый 07.12.2009, 10:52
Novasty Novasty вне форума
Прохожий
 
Регистрация: 07.12.2009
Сообщения: 3
Репутация: 10
По умолчанию

Да, нужна именно многопоточная. Без потоков даже я напишу)
Ответить с цитированием
  #4  
Старый 07.12.2009, 10:54
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от Novasty
Да, нужна именно многопоточная. Без потоков даже я напишу)
Много поточная, без поточная и одно поточная - всё разные весчи, у меня одно поточное вычисление, то есть в отдельном от программы потоке вычисляет

и вообще, какой смысл от 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  
Старый 07.12.2009, 12:14
Novasty Novasty вне форума
Прохожий
 
Регистрация: 07.12.2009
Сообщения: 3
Репутация: 10
По умолчанию

Задание у меня такое
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025