• 德尔福 基础


    并行

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_TParallel.For_from_the_Parallel_Programming_Library

    Using TParallel.For from the Parallel Programming Library

     

    Go Up to Using the Parallel Programming Library


    The Parallel Programming Library (PPL) includes a loop function, TParallel.For, that allows to run its loops in parallel.

    Within parallel loops, you must transform your operations into thread-safe operations. You can use members of the System.SyncObjs unit, such as TInterlocked methods.

    Converting a For Loop into a TParallel.For Loop

    Delphi:

    For LoopTParallel.For Loop
    for I := 1 to 10 do
    begin
      // …
    end;
    
    TParallel.For(1, 10, procedure(I: Integer)
      begin
        // …
      end);
    

    C++:

    If you are using a Clang-enhanced C++ compiler, you can use lambda expressions:

    For LoopTParallel.For Loop
    for (int i = 1; i <= 10; i++) {
      // …
    }
    
    TParallel::For(0, 10, TProc1<int>([](int I){
      // …
    }));
    

    You can alternatively use a functor, which works with both previous-generation compilers and Clang-enhanced compilers:

    For LoopTParallel.For Loop
    for (int i = 1; i <= 10; i++) {
      // (Loop logic)
    }
    
    class TMyFunctor : public TCppInterfacedObject<TProc__1<int> > {
    public:
      void __fastcall Invoke(int I) {
        // (Loop logic)
      }
    };
    
    // …
    
    TParallel::For(1, 10, System::DelphiInterface<TProc__1<int> >(new TMyFunctor()));
    

    If the loop needs access to one or more variables from the context outside the callback function, you must use a functor as follows:

    1. Declare variables in the functor class to hold copies or references to the variables that you need.
    2. Declare a constructor of the functor class that accepts the copies or references to those variables as parameters and initializes the corresponding functor variables with their values.
    3. Pass those variables to the contructor when you instantiate the functor.
    4. In your logic, in Invoke(), you can access those functor variables.

    For example:

    class TMyFunctor : public TCppInterfacedObject<TProc__1<int> > {
    public:
      TMyFunctor(int a, TB *b) : a(a), b(b) {}
      void __fastcall Invoke(int I) {
        // (Loop logic)
      }
      int a;
      TB *b;
    };
    
    // …
    
    TParallel::For(1, 10, System::DelphiInterface<TProc__1<int> >(new TMyFunctor(a, b)));





    分类方法

     TTest = class;
     
     // Declaring metaclass type
     TTestClass = class of TTest;
     
     TTest = class
     public
       // Class methods
       class function add(I, J: Integer): Integer;
       class function GetClsName: string;
     
       // Virtual class method
       class function GetClsNameVirt: string; virtual;
     
       // Class getter and setter
       class function GetCount: Integer;
       class procedure SetCount(I: Integer);
     
       // Virtual class getter and setter
       class function GetStrProp: string; virtual;
       class procedure SetStrProp(N: string); virtual;
     
       // Class static
       class function GetStaticCount: Integer; static;
       class procedure SetStaticCount(I: Integer); static;
     
       // Class properties
       property Count: Integer read GetCount write SetCount; // Non-virtual
       property StrProp: string read GetStrProp write SetStrProp; // Virtual g/setters
     end;
     
     // Function that takes a class reference
     function RegisterTestType(Cls: TTestClass): boolean;




    基本句法元素(Delphi)


    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Fundamental_Syntactic_Elements_(Delphi)

    程序和功能(德尔福)

     

     http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Procedures_and_Functions_(Delphi)

    表达式(德尔福)

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Expressions_(Delphi)

    编译器属性  volatile

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Attributes#Volatile

     

    System.TimeSpan.TTimeSpan

     http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.TimeSpan.TTimeSpan

    使用并行编程库

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_the_Parallel_Programming_Library

    简单类型(Delphi)

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi)

     
  • 相关阅读:
    idea 的maven窗口中dependencies有红线
    因SpringBootApplication指定scanBasePackages后,出现问题
    You have an error in your SQL syntax
    如何在Interceptor中使用@Autowired
    idea如何修改默认的${user}值
    idea如何创建类和接口时,自动添加类注释或接口注释?
    安装postman时报错
    https网站如何访问http接口
    Docker启动tomcat容器后访问404
    Python中and_Or
  • 原文地址:https://www.cnblogs.com/marklove/p/9503194.html
Copyright © 2020-2023  润新知