- PR -

時限装置

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-03 18:34
C#で例えばAという処理をした5秒後なら5秒後に
Bという処理をするといったような時限装置みたいな
プログラムを組みたいと思っております。

timerを応用させようかとも思っておりますが
Aという処理を複数回(何回起こるかは場合によって違う)行うため
timerだとかぶってしまい、競合してしまいます。

よき方法をご存知の方教えていただけると幸いです。

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-02-03 19:29 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-03 18:36
引用:

未記入さんの書き込み (2007-02-03 18:34) より:

C#で例えばある処理をした5秒後なら5秒後にある処理をするといったような時限装置みたいなプログラムを組みたいと思っております。
timerを応用させようかとも思っておりますがなんだか、うまくありません。


Timer で良いですから、何がうまくいかないのかを明示的に書きましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-03 23:56
引用:

timerを応用させようかとも思っておりますが
Aという処理を複数回(何回起こるかは場合によって違う)行うため
timerだとかぶってしまい、競合してしまいます。


 たぶん、あとから編集追加したんだと思うけど、レスがついてからそうするのは、あまりよくありません。編集ではスレッドは上に行かず、編集されたことに気がつかれないからです。

 それでもやっぱり、何が悪いのかわかりません。何と、何が、かぶるのでしょう?A の処理と A の処理?それとも、A の処理と、B の処理?

 A はパラレルに実行するけど、B はシリアルに実行したい、ということなら、B を何回処理するか、というフラグを作るとか。


 あなたがどんな仕事をしているかわからないので、「A という処理をした 5秒後に B という処理」では、なぜ 5秒あけないといけないのか、わかりません。また、A にしても B にしても、それぞれの処理がどれくらいの頻度で発生し、どれくらいの時間継続するのか、想像できません。
 想像できないので、どうすれば解決できるか、具体的な方法を示すのは、大変難しいです。
_________________
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-02-04 13:14
引用:

未記入さんの書き込み (2007-02-03 18:34) より:
C#で例えばAという処理をした5秒後なら5秒後に
Bという処理をするといったような時限装置みたいな
プログラムを組みたいと思っております。



Aという処理は複数回実行されるけれど、Bの処理は1回だけで良いということかな?

なら、Bが実行されたことを示すフラグを設けて、Aの処理でタイマーをスタートする時にフラグを確認してから実行すれば良いのではないでしょうか。

Bが実行中なら無視するという方法なら、B の処理中だけフラグが立つようにすれば良いだけですし。

タイマーはイベント発生直後に Stop させれば1回のみ5秒数えてくれます。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-02-04 19:02
私の中のエスパー伊東は田中さんとは違う発想をしました。
基本の処理がこうだとして

コード:

0-1-2-3-4-5-6-7-8-9-0-1-2-3-4-5(秒)
A
          B


A の処理を連続して行ったら、それぞれにあわせて5秒後に B の処理を
したい、ということでしょうか。いわゆる下図のような状態。

コード:

0-1-2-3-4-5-6-7-8-9-0-1-2-3-4-5(秒)
A(1)
  A(2)
    A(3)
          B(1)
            B(2)
              B(3)


だとすると、タイマーを1秒間隔で実行させておいて、タイマーイベント処
理の中で必要だったら B の処理をする、というような感じにするのがよさ
そうです。
A の処理を行ったらキューに5秒後の時刻を設定して、タイマーではキュー
の中身を見て指定時刻を経過していたらだったらBの処理を行う、とか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-04 19:08
みなさんありがとうございます。
僕が言いたかったのはぽぴ王子さんのコメント通りです。

やっぱり、タイマーをぐるぐるまわしてチェックするしか
ないのですね。
なんといいますか、非同期?でチェックしなくても
いいようなのがあると、プログラムを組む上で、
大変、ありがたいのですが、なさそうですね。
助かりました。ありがとうございます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-04 19:16
引用:

未記入さんの書き込み (2007-02-04 19:08) より:
みなさんありがとうございます。
僕が言いたかったのはぽぴ王子さんのコメント通りです。

やっぱり、タイマーをぐるぐるまわしてチェックするしか
ないのですね。
なんといいますか、非同期?でチェックしなくても
いいようなのがあると、プログラムを組む上で、
大変、ありがたいのですが、なさそうですね。
助かりました。ありがとうございます。


わかんないっす。。。。

コード:
0-1-2-3-4-5-6-7-8-9-0-1-2-3-4-5(秒)
A(1)      B(1)
  A(2)      B(2)
    A(3)      B(3)
      A(4)      B(4)
        A(5)      B(5)
          A(6)      B(6)


こうですよね?

 だったら、A と B の処理をするスレッドを作成し、A の処理後 5 秒間 Sleep すればいいのでは?
_________________
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-02-04 19:57
引用:

未記入さんの書き込み (2007-02-04 19:08) より:
みなさんありがとうございます。
僕が言いたかったのはぽぴ王子さんのコメント通りです。

やっぱり、タイマーをぐるぐるまわしてチェックするしか
ないのですね。


だれもそんなこと言ってませんて(そうするしかない可能性もありますが)。
他人の言葉を借りてコメントどおりといわれても、不明な点はまだいろいろあります。

A(1)の処理とB(1)の処理に、処理対象データとかの関係があるのかないのか、
B(n)はただ5秒後に起動されればよいだけなのか、
B(1-n)の各処理は重なってもいいのか、A(1-n)の処理は重なることがあるのか、
B(1-n)の各処理は重なってでも5秒後が重要なのか、
5秒後に実行というのはクリティカルなタイミングなのか、
AとBが同一スレッドである必要があるのか、別スレッドでもいいのか
etc...

スキルアップ/キャリアアップ(JOB@IT)