第24講 数独解答作成の作成
第7話 BackgroundWorkerによる高速化(9次の場合) 

  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          DateTime^ hj=DateTime::Now;
          n=9;
          g(n);
          backgroundWorker1->RunWorkerAsync();
          backgroundWorker2->RunWorkerAsync();
          backgroundWorker3->RunWorkerAsync();
          backgroundWorker4->RunWorkerAsync();
          array<String^>^ w=gcnew array<String^>(14);
          DateTime^ ow=DateTime::Now;
          TimeSpan sa=ow->Subtract(*hj);
          w[16]=L"時";w[17]=L"間";w[18]=L"計";w[19]=L"則";w[20]=L":";w[21]=(sa.TotalSeconds).ToString();
          dataGridView1->Rows->Add(w);

       
 }
これではもちろん時間計測はできません。
理由は簡単です。

backgroundWorkerに分岐した後もbutton1_Clickはプログラムが進んでしまいます。
backgroundWorker1等の方が処理に時間がかかりますので、先にbutton1_Clickの処理が終わってしまいます。
button1_Clickの処理はもちろん0.000000001秒もかからないでしょう。
ですから、
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          DateTime^ hj=DateTime::Now;
          n=9;
          g(n);
          backgroundWorker1->RunWorkerAsync();
          backgroundWorker2->RunWorkerAsync();
          backgroundWorker3->RunWorkerAsync();
          backgroundWorker4->RunWorkerAsync();
          array<String^>^ w=gcnew array<String^>(14);
          DateTime^ ow=DateTime::Now;
          TimeSpan sa=ow->Subtract(*hj);
          w[16]=L"時";w[17]=L"間";w[18]=L"計";w[19]=L"則";w[20]=L":";w[21]=(sa.TotalSeconds).ToString();
          dataGridView1->Rows->Add(w);

       
 }
は全く意味がありません。

本日はここまで。後日続きを書きます。


第24講第6話へ 第25講第1話へ

戻る



VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座