スポンサーリンク

C++CLIでParallel::For

以下書き直し記事

以下旧記事

C#のサンプルは沢山あるがCLIで実行できずに困ったのでここに書いておく。

下記は、要素数10のdoubleの配列aの内容を、0~9の1.5倍の値で初期化する。

 

using namespace System;
typedef double datatype_t;
ref struct mystruct{
   array<datatype_t>^ m_a;
public:
   mystruct(array<datatype_t>^ dst){
      m_a = dst;
   }
   void function(int number){
      m_a[ number] =  number*1.5;
   }
};
int main(array<System::String ^> ^args)
{
   array<datatype_t>^ a = gcnew array<datatype_t>(10);

   mystruct^ plfor = gcnew mystruct(a);

   System::Threading::Tasks::Parallel::For(
      0,
      a->Length,
      gcnew Action<int>(plfor, &mystruct::function)
   );

   for(int i= 0 ;i < a->Length;i++){
      System::Console::WriteLine( 
         System::String::Format("a[{0}] = {1}",i,a[i]));
   }

   Console::ReadLine();

    return 0;
}

 

 

2 件のコメント

  • 以前お世話になりましたオカダ・システムエンジニアリング研究所です。
    サンプルプログラムを読みましたが、これでも複雑で理解できません。

    int i;
    int c1[100];
    for (i = 0; i < 100; i ++) {
    c1[i] = i;
    }
    この簡単な処理をParallel::Forでやったらどうなりますか。

    あと、gcnew Action(plfor, &mystruct::function)
    の は、なぜintなのですか。

    御回答をお願いします。 9月22日

    • こんにちは。
      https://suzulang.com/cppcli-parallel-for-2/
      にもう少しわかりやすくまとめました。
      std::sortやstd::min_elementのように、
      第一引数:begin
      第二引数:end
      第三引数:関数オブジェクト
      として渡す書き方であることがわかると、読みやすくなると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: