C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 29 を表示中)
■13613 / )  Re[13]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ 七曜 (63回)-(2008/01/31(Thu) 22:36:48)
No13605 (モー さん) に返信
> 今回のシステム構造としてはクラサバ関係でサーバーにあるexeのコード中にスレッドは1つだけあり、それに複数のクライアントが
> アクセスしにくることになっていました。スレッドに排他制御等はかけず、場合によっては同じスレッドをほぼ同時に多数動かす
> 場合も想定しています。

多くの場合(Soket使う場合なんかですけど)、
リスナスレッド(クライアントからのリクエストをリッスンするスレッド)がリクエストを受けたら
処理用スレッドを生成/開始し、必要なデータを取得/処理する・・・といった感じになるような・・・。
割とメジャーな処理なので、通信プログラミング系の書籍なんかも多くありますね。

> その為、万が一、そのうちの1クライアントのアクセスが1スレッド内でフリーズしたとしたら、他のクライアントに影響が
> 出ないかと考えておりました。

ですので、クライアント/サーバ型では、1スレッドで処理する事はスケーラビリティやアベイラビリティの関係でやりません。

> ちなみに同じクラスにあるスレッドを開始する際に引数を渡したいのですが、教えて頂きたいです。
> 同クラス内での共通変数使う手段はありますが、複数スレッドあることであるスレッドが処理中に絶妙なタイミングで他のアクセス
> したクライアントが共通変数を変えてしまう恐れがある為です。

これも多くの場合、別のインスタンス(実体)を使用する様にデザイン/インプリメントされます。


> (同一のスレッドを時間差で呼び出し、先に動き出したスレッドがフリーズした場合、そのスレッドの変数データは後から動き出した
> スレッドの処理により変化しないということを前提に必要としています)

これは・・・前提が・・・怪しいですね。
先に動いたスレッドが必ず先に処理される、というのは、たまたまそう動いて見えているだけかもしれません。


さて、スレッドに引数を渡す方法ですが

[スレッドを作成し、開始時にデータを渡す]
http://msdn2.microsoft.com/ja-jp/library/ts553s52(VS.80).aspx

にあるように、ParameterizedThreadStartを使うか、スレッド プロシージャとデータをヘルパー クラスにカプセル化し、ThreadStartを使う方法があります。

蛇足ですが、.NETでスレッド処理をされるのであれば、
[マネージ スレッド処理]
http://msdn2.microsoft.com/ja-jp/library/3e8s7xdd(VS.80).aspx
をご一読される事をお薦めします。
返信 編集キー/


管理者用

- Child Tree -