NOBlog 〜バカの一念〜

基本的にはNOB(ノブ)の日記。
スキークロス国際レース出場を目標に日々努力中。

  November/2007  
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
blog内検索

[.NET応用]マルチスレッドプログラム

2005-01-24
Windowsフォームのアプリケーションで行う処理に時間が掛かる場合、その処理が終了するまでウィンドウの描画が行われず、アプリがハングしたかのように見えてしまう場合があります。
このような処理はマルチスレッドで行えば、時間のかかる処理中にもユーザーの入力を受け付ける事ができます。
マルチスレッド処理に関して少し紹介しましょう。
マルチスレッドの処理には、まず何が必要でしょうか?
マルチスレッドと言うからには、まず”複数のスレッド”が必要です。
.NETでは、現在の処理を行っているスレッドの他に任意の数の新しいスレッドを作成することが可能です。
新しいスレッドを作成する方法を以下に紹介します。

Dim t As New System.Threading.Thread(AddressOf MyFunction)

このステートメントでは、新しいスレッドのインスタンスを作成しています。
Threadクラスのコンストラクタは、ThreadStartデリゲートを要求しますが、VB.NETの場合はThreadStartのコン
ストラクタの呼び出しは省略できますので、上記の例は間違いではありません。
VB.NETの場合は、例のようにするだけでThreadStartコンストラクタが自動的に呼び出されます。

これで、新しいスレッドを作成することができました。では引き続き、新しいスレッドの処理を実行しましょう。
実行の方法は次の通りです。

t.Start()

これだけです。

新しいスレッドを作成(Threadクラスに、実行する関数のポインタを渡す)して、Startメソッドを呼び出す。
たったこれだけでマルチスレッドプログラムを実行できるのです。

非常に簡単ですね。
マルチスレッド処理を実行するのは簡単です。しかし、注意すべき部分がたくさんあります。
作成したスレッドは、フォアグラウンドスレッドにするのか・バックグラウンドスレッドにするのか。
スレッドの優先順位はどうするか。
共有メンバにアクセスする場合、そのメンバはスレッドセーフであるかどうか。
そもそも、別スレッドで実行する必要があるか。

複数のスレッドを作成して実行する事は、もちろんそれなりのオーバーヘッドが掛かります。
誤った設計をすると、逆にパフォーマンスを落とす結果となってしまう場合や、データを壊してしまう可能性も
あります。よく検討して使用する必要があると思います。

マルチスレッドに関する詳細は、MSDN「マルチスレッド アプリケーション」を参照すると良いでしょう。


※注
当ブログのTipsは、@IT等の情報サイトの内容を参考にして構成された記事
もあります。Tipsの内容に著作権等権利を侵害する内容があった場合には、
告知して下さい。早急に訂正または削除にて対応したいと思います。

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

この記事へのコメント
Copyright(C) PwBlog. All rights reserved.