OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

一定時間毎に、配列に値を入れたい。

  • すぐに回答を!
  • 質問No.152236
  • 閲覧数125
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

たとえば、1秒おきにある配列に適当な数値を代入するにはどうすればよろしいでしょうか。Timer イベントの発生のさせ方はわかるのですが…。
ってか、これじゃ質問の意味がわかんないですよね。例えば、1秒毎にそのときの時刻の、「秒」を配列 a に格納することにします。。はじめた時間が 14:35:17 なら、
a(0) = 17, a(1) = 18, a(2) = 19, a(3) = 20,…
というようにしたいのです。これでなんとなく分かって頂けると思うんですが。よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 44% (89/202)

「Timerイベント」が発生するたびに変数が初期化されるのが問題なのでしょうか? でしたら、「Staticステートメントで変数を宣言する。」あるいは、モジュールの宣言セクションで「Publicキーワードを使って”パブリック変数”を宣言する。」を利用してみてはいかがでしょうか? どちらの場合でも、途中で初期化(0?)する必要がある場合はそのタイミングが難しいかも知れません。 ご参考までに... ...続きを読む
「Timerイベント」が発生するたびに変数が初期化されるのが問題なのでしょうか?
でしたら、「Staticステートメントで変数を宣言する。」あるいは、モジュールの宣言セクションで「Publicキーワードを使って”パブリック変数”を宣言する。」を利用してみてはいかがでしょうか?
どちらの場合でも、途中で初期化(0?)する必要がある場合はそのタイミングが難しいかも知れません。
ご参考までに...
お礼コメント
noname#11247

早速のご回答、ありがとうございます。ただ、初心者なので、ちょっと難しいですね。もっともっとレベルアップしたいところです。
投稿日時 - 2001-10-17 16:50:39
  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

ぼくはVBのタイマーを信用していません。 VBのタイマーは、タイマーイベントのロジックの処理の重さにより多少ずれているように思えるのです。(正確だというのであればごめんなさい) ちなみにAPI関数でWINDOWSが起動してからどれだけの時間が経過したかなどの、時間に関するものがあります。そういったものを使用したほうが、コンパイル後のEXEが小さくすみます。 タイマーコントロールを使用しないや ...続きを読む
ぼくは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
お礼コメント
noname#11247

ありがとうございます。わざわざソースまで書いてくださって、とてもうれしいです。大変参考になりました。おかげさまで問題はほぼ解決できました。勉強になりました。
投稿日時 - 2001-10-17 16:52:31
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ