- - PR -
スレッドについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-19 16:54
言語:Visual Stdio2008 C#
プロジェクト形態:Windowsサービス 1つのスレッドで、複数(5種類)のメソッドに優先順位をつけて同期処理したいの ですがどのようなスレッドの作りにしたらいいでしょうか? スレッドについてのアドバイスをご教授下さい。 | ||||
|
投稿日時: 2008-11-19 18:51
よくわかりません。 スレッドが1つなら、複数のメソッドは順次処理されますよ? メソッド1つにつき、スレッド1つの意味でしょうか? 追記 で、あなたは独力で、どこまでできるのでしょう?スレッドを5つ立ち上げて、別々のメソッドを実行させ(望む処理でなくて可)、リソースの回収まで出来ますか? それとも、そこから尋ねていますか? 前者なら、何をもって同期させるのでしょう? [ メッセージ編集済み 編集者: Jitta 編集日時 2008-11-19 18:59 ] | ||||
|
投稿日時: 2008-11-19 19:39
ありがとうございます。
説明不足ですみません。 30秒周期でシングルスレッドで処理する場合 public class TESTクラス Aメソッド Aメソッドが終了したらBへ ↓ Bメソッド Aメソッドが終了したらBへ ↓ Cメソッド Aメソッドが終了したらBへ ↓ Dメソッド Dメソッドが終了したら次の30秒まで待機 のような同期処理を実現したいのですが 可能でしょうか? 参照URLがあったら教えてください。 | ||||
|
投稿日時: 2008-11-19 20:15
矢印と書いてあることが一致していないように思いますが... 矢印を信じた場合、優先順位は必要なくて 1 スレッドで逐次実行し D メソッド後に 30 秒待機させれば良いように思いますが... 私が意図を読み取れていないだけかもしれませんね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-11-19 23:22
「Bスレッドで、Aスレッドが終了したらBへ」っていうのも
「Cスレッドで、Aスレッドが終了したらBへ」っていうのも 理解できません。 考えがまとまっていない状態で質問するのは、如何なものか と思います。 | ||||
|
投稿日時: 2008-11-20 09:21
全体的に意味不明な質問ですが、無理矢理、超好意的に解釈してみます。
A〜Dの実行にある程度時間がかかる場合、Dメソッドの完了後に30秒待機させると実行周期がずれていきますね。「次の30秒まで待機」という表現からもA〜Dの実行にかかった時間は差し引かなければならないような印象を受けました。つまり、正確に30秒周期で A を開始したい? このようなことを実現しようとした場合には(実際の処理部はシングルスレッドで十分だったとしても)別のスレッドを使うのは有効ですね。たとえば、JavaではScheduledExecutorService.scheduleAtFixedRate()で実現できます。scheduleWithFixedDelay()を使うとDの完了後に指定時間待機することになります。scheduleWithFixedDelay()はDのあとでsleepさせるのとほとんど同じです。 .NETでもTimerを使えばscheduleAtFixedRate()と同様に周期を維持した実行ができるのではないかと思います。System.Windows.Forms.Timerはイベントディスパッチスレッドを使用するし、System.Timers.Timerも別のスレッドを使用しますよね。 なので、順次実行だからといって、スレッドが必要ないとは言えないですね。 #「Bスレッドで、Aスレッドが終了したらBへ」などの表現はコピペ時のミスと好意的に捉えておきます。 | ||||
|
投稿日時: 2008-11-20 10:15
雰囲気のみで解釈すると
っていう関数を Timer で 30 秒毎に呼び出すだけでいいんじゃ、 と思いますが・・・。 | ||||
|
投稿日時: 2008-11-20 10:37
言語:Visual Stdio2008 C#
本当にすみませんでした。 たくさん回答ありがとうございます。 よく確認しないで送信したことをお詫びします。 以後、気をつけます。 下記の流れでシングルスレッド方式を使って 処理させようと考えているのですが、 各メソッドが終了したかをJOIN()を使って処理させようとしています。 但し、あるメソッドが終了しない状態になった場合、 各メソッドをタイムアウトで終了させようと考えていますのですが 以下のスレッド処理について、何か理想的な方法がありましたら ご教授ください。 30秒周期でA〜Dのメソッドを順に実行(System.Timers使用) Aメソッド A.JOIN() //Aメソッド終了後Bメソッドへ ↓ Bメソッド B.JOIN() /Bメソッド終了後Cメソッドへ ↓ Cメソッド C.JOIN() //Cメソッド終了後Dメソッドへ ↓ Dメソッド D.JOIN() //Dメソッド終了後、次の30秒でAメソッドへ |
1|2|3
次のページへ»