- - PR -
時限装置
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-03 18:34
C#で例えばAという処理をした5秒後なら5秒後に
Bという処理をするといったような時限装置みたいな プログラムを組みたいと思っております。 timerを応用させようかとも思っておりますが Aという処理を複数回(何回起こるかは場合によって違う)行うため timerだとかぶってしまい、競合してしまいます。 よき方法をご存知の方教えていただけると幸いです。 [ メッセージ編集済み 編集者: 未記入 編集日時 2007-02-03 19:29 ] | ||||||||
|
投稿日時: 2007-02-03 18:36
Timer で良いですから、何がうまくいかないのかを明示的に書きましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-02-03 23:56
たぶん、あとから編集追加したんだと思うけど、レスがついてからそうするのは、あまりよくありません。編集ではスレッドは上に行かず、編集されたことに気がつかれないからです。 それでもやっぱり、何が悪いのかわかりません。何と、何が、かぶるのでしょう?A の処理と A の処理?それとも、A の処理と、B の処理? A はパラレルに実行するけど、B はシリアルに実行したい、ということなら、B を何回処理するか、というフラグを作るとか。 あなたがどんな仕事をしているかわからないので、「A という処理をした 5秒後に B という処理」では、なぜ 5秒あけないといけないのか、わかりません。また、A にしても B にしても、それぞれの処理がどれくらいの頻度で発生し、どれくらいの時間継続するのか、想像できません。 想像できないので、どうすれば解決できるか、具体的な方法を示すのは、大変難しいです。 _________________ | ||||||||
|
投稿日時: 2007-02-04 13:14
Aという処理は複数回実行されるけれど、Bの処理は1回だけで良いということかな? なら、Bが実行されたことを示すフラグを設けて、Aの処理でタイマーをスタートする時にフラグを確認してから実行すれば良いのではないでしょうか。 Bが実行中なら無視するという方法なら、B の処理中だけフラグが立つようにすれば良いだけですし。 タイマーはイベント発生直後に Stop させれば1回のみ5秒数えてくれます。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2007-02-04 19:02
私の中のエスパー伊東は田中さんとは違う発想をしました。
基本の処理がこうだとして
A の処理を連続して行ったら、それぞれにあわせて5秒後に B の処理を したい、ということでしょうか。いわゆる下図のような状態。
だとすると、タイマーを1秒間隔で実行させておいて、タイマーイベント処 理の中で必要だったら B の処理をする、というような感じにするのがよさ そうです。 A の処理を行ったらキューに5秒後の時刻を設定して、タイマーではキュー の中身を見て指定時刻を経過していたらだったらBの処理を行う、とか。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-02-04 19:08
みなさんありがとうございます。
僕が言いたかったのはぽぴ王子さんのコメント通りです。 やっぱり、タイマーをぐるぐるまわしてチェックするしか ないのですね。 なんといいますか、非同期?でチェックしなくても いいようなのがあると、プログラムを組む上で、 大変、ありがたいのですが、なさそうですね。 助かりました。ありがとうございます。 | ||||||||
|
投稿日時: 2007-02-04 19:16
わかんないっす。。。。
こうですよね? だったら、A と B の処理をするスレッドを作成し、A の処理後 5 秒間 Sleep すればいいのでは? _________________ | ||||||||
|
投稿日時: 2007-02-04 19:57
だれもそんなこと言ってませんて(そうするしかない可能性もありますが)。 他人の言葉を借りてコメントどおりといわれても、不明な点はまだいろいろあります。 A(1)の処理とB(1)の処理に、処理対象データとかの関係があるのかないのか、 B(n)はただ5秒後に起動されればよいだけなのか、 B(1-n)の各処理は重なってもいいのか、A(1-n)の処理は重なることがあるのか、 B(1-n)の各処理は重なってでも5秒後が重要なのか、 5秒後に実行というのはクリティカルなタイミングなのか、 AとBが同一スレッドである必要があるのか、別スレッドでもいいのか etc... |