zoukankan      html  css  js  c++  java
  • 德尔福 基础

    并行

    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)

     
  • 相关阅读:
    Java uuid生成随机32位
    Java 、C# Excel模板,数据一对多,主从表关系,导入到数据库
    ROS 八叉树地图构建
    操作系统基础信息搜集
    菜鸟的信息安全学习之路
    提权初探
    Windos/Linux 反弹 shell
    初读鸟哥的linux私房菜的收获
    linux中find命令的摘要
    分享一个Flink checkpoint失败的问题和解决办法
  • 原文地址:https://www.cnblogs.com/marklove/p/9503194.html
Copyright © 2011-2022 走看看