第23講 BackgroundWorkerによるマルチスレッド
第2話 BackgroundWorkerの練習
では、最初に簡単な例で練習してから、BackgroundWorkerによる素数探索に進むことにしましょう。
簡単な例とは、
1から100までの整数の和
1から100までの偶数の和
1から100までの奇数の和
1から100までの整数の2乗の和
をBackgroundWorkerによって並列に処理をさせてみましょう。
尚、この例では一瞬にして終わってしまいCPU使用率を見ることができないので、
読者の皆さんは100を1000000000000などに変更して、
CPU使用率が100%になっていることを確認して下さい。
まず、次のようなForm1を作ってください。
そして、Form1にBackgroundWorkerを4つ追加します。
BackgroundWorkerを追加するには、ツールボックスの
BackgroundWorkerをForm1上に任意の場所にドラッグします。
すると、のように、
下の方にBackgroundWorker1が入ります。あと3回繰り返すと、
と4つBackgroundWorkerを追加することができます。
次に、実行ボタンをダブルクリックして、
String^ w1;String^ w2;String^ w3;String^ w4;
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
backgroundWorker1->RunWorkerAsync();
backgroundWorker2->RunWorkerAsync();
backgroundWorker3->RunWorkerAsync();
backgroundWorker4->RunWorkerAsync();
label5->Text=w1;
label6->Text=w2;
label7->Text=w3;
label8->Text=w4;
}
とコーティングして下さい。
backgroundWorker1->RunWorkerAsync();で処理が枝分かれし、
backgroundWorker1が働き出します。次にデザインに戻り、
backgroundWorker1をダブルクリックしますと、
と自動的にSystem::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) ができます。
ここに、1から100までの整数の和の処理をコーティングします。
残りの3つのbackgroundWorkerについても同じことを繰り返し、それぞれ
1から100までの偶数の和の処理
1から100までの奇数の和の処理
1から100までの整数の2乗の和の処理
のコーティングをします。
そして、ビルドして実行ボタンを押すと、
となったり、
となったりします。
しかし、もう1回ボタンを押すと、
とすべて正しく表示されます。
では皆さん、コーティングとこの不可解な現象に挑戦しましょう。
不可解な現象のヒントは、前のマルチスレッドのJoin();です。
なぜこれが必要でしたか。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座