スポンサーリンク
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
第三引数:関数オブジェクト
として渡す書き方であることがわかると、読みやすくなると思います。