Delphi의 병렬 계산
                                            
 6615 단어  Delphi
                    
hits:=0;
for I:=0 to NumberOfIterations-1 do
begin
      {perform some calculations dependent on random number generation to determine a value x}
      if x>0 then hits:=hits+1;
end;{For Loop}
FailureProbability:=hits/NumberOfIterations;만약 교체 횟수가 매우 크다면 어떻게 병행 방법으로 완성합니까?답은 다음과 같습니다.
program loop;
{$APPTYPE CONSOLE}
const
    NumberOfIterations = 30000000;
type
    TCalcThread = class(TThread)
    private
        FIdx: Integer;
        FHits: Cardinal;
    protected
        procedure Execute; override;
    public
        constructor Create(Idx: Integer); reintroduce;
        property Hits: Cardinal read FHits;
    end;
    
constructor TCalcThread.Create(Idx: Integer);
begin
    FIdx := Idx;
    FHits := 0;
    inherited Create(False);
end;
procedure TCalcThread.Execute;
var
    i, x, start, finish: Integer;
begin
    start := (NumberOfIterations div 4) * FIdx;
    finish := start + (NumberOfIterations div 4) - 1;
    
    for i := start to finish do begin
        //do your random calculations here
        if x > 0 then
            Inc(FHits);
    end;
end;
var
    thrarr: array[0..3] of TCalcThread;
    hndarr: array[0..3] of THandle;
    i: Integer;
    FailureProbability: Extended;
    
begin
    for i := 0 to 3 do begin
        thrarr[i] := TCalcThread.Create(i);
        hndarr[i] := thrarr[i].Handle;
    end;
    
    WaitForMultipleObjects(4, @hndarr, True, INFINITE);
    
    FailureProbability := Extended(thrarr[0].Hits + thrarr[1].Hits + thrarr[2].Hits + thrarr[3].Hits) / NumberOfIterations;
    
    for i := 0 to 3 do
        thrarr[i].Free;
end.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.