- 締切済み
一定時間毎に、配列に値を入れたい。
たとえば、1秒おきにある配列に適当な数値を代入するにはどうすればよろしいでしょうか。Timer イベントの発生のさせ方はわかるのですが…。 ってか、これじゃ質問の意味がわかんないですよね。例えば、1秒毎にそのときの時刻の、「秒」を配列 a に格納することにします。。はじめた時間が 14:35:17 なら、 a(0) = 17, a(1) = 18, a(2) = 19, a(3) = 20,… というようにしたいのです。これでなんとなく分かって頂けると思うんですが。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
ぼくはVBのタイマーを信用していません。 VBのタイマーは、タイマーイベントのロジックの処理の重さにより多少ずれているように思えるのです。(正確だというのであればごめんなさい) ちなみにAPI関数でWINDOWSが起動してからどれだけの時間が経過したかなどの、時間に関するものがあります。そういったものを使用したほうが、コンパイル後のEXEが小さくすみます。 タイマーコントロールを使用しないやり方を記述します。 処理の簡単なながれとしては 直前の実行時から1秒経過したら、配列に値をセットするようになってます。 実行秒数は、配列要素の数だけの秒数を実行します。 ----以下のソースを貼り付けてください。---- 必要なものフォームとコマンドボタン1 Option Explicit Private Declare Function timeGetTime Lib "winmm.dll" () As Long Private pTime As Long Private lngWork(5) As Long Private lngCount As Long Private Sub Command1_Click() Dim maxCount As Long Dim lngGetTime As Long Command1.Enabled = False lngCount = LBound(lngWork) maxCount = UBound(lngWork) 'とりあえず開始の時間を取得 pTime = timeGetTime Do Until lngCount > maxCount DoEvents '時間を取得 lngGetTime = timeGetTime '前回の処理から1秒経過すると以下の処理を行う If (lngGetTime - pTime >= 1000) Then lngWork(lngCount) = lngGetTime pTime = lngGetTime lngCount = lngCount + 1 End If Loop MsgBox "end" Command1.Enabled = True End Sub
- Zincer
- ベストアンサー率43% (88/201)
「Timerイベント」が発生するたびに変数が初期化されるのが問題なのでしょうか? でしたら、「Staticステートメントで変数を宣言する。」あるいは、モジュールの宣言セクションで「Publicキーワードを使って”パブリック変数”を宣言する。」を利用してみてはいかがでしょうか? どちらの場合でも、途中で初期化(0?)する必要がある場合はそのタイミングが難しいかも知れません。 ご参考までに...
お礼
早速のご回答、ありがとうございます。ただ、初心者なので、ちょっと難しいですね。もっともっとレベルアップしたいところです。
お礼
ありがとうございます。わざわざソースまで書いてくださって、とてもうれしいです。大変参考になりました。おかげさまで問題はほぼ解決できました。勉強になりました。