• 締切済み

ミリ秒単位の時間設定

visual Basic6を使用してデータを0.5秒間隔で取得するプログラムを作っています。time関数のintervalを使うよりも正確な間隔でデータを取得したいと考えています。そこで、APIを使っての操作を調べ出したのですが、初心者なのでプログラムでの組み込み方がよくわかりません。教えてください。よろしくお願いします。

みんなの回答

  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.1

VBのカテゴリで書いたほうが返事が早そうですよ。 詳しく書くと説明が長くなるので、さわりだけ。 Winのデフォルト設定でAPIの定時割り込み制御や時間計測機能は (過負荷で他処理に影響を与えないように)通常抑えられた状態にあり、 保証制度は10ms程度しかありません。 timeBeginPeriod 関数をコールすれば、制御周波数が上がるので概ね思惑 通りの振る舞いをするようになります。 timeBeginPeriod timeEndPeriod timeSetEvent timeKillEvent timeGetTime これらの関数をキーワードに検索してみてください。

ujikko
質問者

お礼

お返事ありがとうございます。 早速プログラムを組みなおしてみます。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 時間(ミリ秒を含む)の引き算

    現在、VB6でAPI関数timeGetTimeを使って処理時間を測定する プログラムを作成しています。 ミリ秒まで取得・表示しているのですが、ミリ秒を含む時間の引き算方法がわかりません。 以下のような引き算を行い、処理開始・終了時間と経過時間を表示させたいです。 例) 15:13:59.054(終了時間)-15:12:57.112(開始時間) =99:99:99.999(経過時間) どなたか教えて頂けないでしょうか。 宜しくお願い致します。

  • ミリ秒を○時間○分○秒にしたい

    http://www.excellenceweb.net/vba/api/what_windows_api.html のページを参考にPC起動時間を取得したいのですが サンプルは単位がミリ秒になっています。 -------------------------------------------------- Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub TEST1() Dim Tickcount As Long 'GetTickCount関数から、起動からの時間が返される Tickcount = GetTickCount() MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています" End Sub -------------------------------------------------- ○時間○分○秒にしたいのですが どうすればいいでしょうか? Formatを使うと思うのですが どういうコードを書けばいいのかわかりません。 ご教授よろしくお願いします。

  • 写真をある一定の時間間隔で撮影保存したいのですが

    現在、自分はOpenCVを使用し、写真をある出来たら0.1秒、0.2秒ぐらいの間隔で写真を取るプログラムを作ろうとしているのですが、time関数かtimer関数を使うのかなと思っているのですが、調べるとシステムの時間を取得ってのが主で、自身がの求めるものは、正直分からない状況です。 もしよければ、アドバイス等をいただけると幸いです。 環境は Visual Studio 2008 Express Edition C++ Windows XP                      です。 宜しくお願いします。

  • Timerコントロールによる動作の時間間隔設定について

    よろしくお願いします! ある常駐プログラムを作成し、操作者があらかじめ指定した時間ごとに 画像を保存するという設定にしています。 Timerコントロールで直接時間間隔を指定するとIntervalが最大60000くらい らしいので、まずLabel1にInterval1000で時計を表示して、次にLabel2に もLabel2.caption=timeで時刻を表示します。 操作者が仮に2分ごとに画像を取ると指定した場合は、 Label2の時刻にDateAddで("s",120,TimeValue(label2.caption))した時刻と Label1の時刻が同じになったら画像を取るというコードにしてます。 で、画像を取ると同時にLabel2.caption=timeでLabel2の値を現在時刻に し、また繰り返し2分足したものとLabel1.captionが同じになるのを 待って画像を取ります。 これを繰り返して指定した時間間隔で画像を取るようにしていまして、 ちゃんと動作するのですが、なぜか時計が23:59:57くらいで Label2の方の表示が止まってしまうのです。 Label1の方はTimerで1秒ごとにちゃんと時計を表示し続けている のですが、Label2だけ0時直前で必ず止まってしまいます。 何か日付が変わると表示ができなくなるような決まりがあるのでしょうか。 色々と試したのですが、ここだけが分かりません。 ご教授お願いいたします! また、私のやり方以外に何か時間間隔を指定する良いコードが ございましたら教えていただけますでしょうか? 例えばTimerコントロールを1分ごとに起動して、3分なら3回カウント させるような方法もどこかで目にしたのですが、操作者が指定する 時間間隔は秒単位にしているので、3秒であったり、120秒(2分)で あったり様々です。 その場合の方法がよく分からないので、最初に書いた方法でコードを 書いています。 よろしくお願いします!!!

  • 【EXCEL VBA】 1/100秒単位で時間取得するには?

    RS232Cで通信して、受信データをリアルタイムでグラフ表示するプログラムを作成しました。 受信した順番に1,2,3…と番号を振っていき、その数字をそのままX軸にしているのですが、 X軸を時間軸にしたく行き詰っております。 ◆失敗策◆ データ受信と同時にNOW()で現在時刻を取得。 1つ目のデータ取得時刻を基準とし、各データ取得時刻との差を求めX軸とする。 上記の方法だと、NOW()で得られる時刻は1秒単位のためうまくいきませんでした。 少なくても1/100秒単位の時間を取得が必要です。 質問内容がうまく説明できたか不安ですが、もし説明不足でしたら補足させて頂きますので、どうかアドバイスを宜しくお願いいたします。

  • システムの時刻を利用しながら800ミリ秒毎のイベント発生

    現在For~Next文とSleep(700)を使用し、 イベントの処理時間を100ミリ秒と換算し、 2台のPCで同じコードを適用させ、 約800ミリ秒ごとにイベントを発生させております。 しかし、処理コード中にIf文やFor文も多数使用しているため、 取得条件の違いや、システムの負荷(?)、PCの性能(?)より遅延が発生していたり、 2台のPC間で一時間当たりの取得情報の量に違いがあることがわかりました。 2台のPCはNTPによる時刻同期により時刻のズレはないものとします。 はたして、システムから時刻を取得しつつ、 正確な800ミリ秒ごとのイベントを発生させる方法はあるのでしょうか。 面倒くさい質問で申し訳ありませんが、どうかよろしくお願いいたします。 現在のコードを以下に記します。 Sub ●約800ミリ秒ごとイベント発生プログラム●() Dim n As Long 'ループ用カウンタ Dim data As String For n = 1 To 26500 'ここから記録機能 Cells(n, "A") = Time Sleep (700) Calculate DoEvents '本当はここにイロイロなコードが入ります。 'ここに入るコードはスグに終わるときもあれば '80ミリ秒くらいかかるときもあります。 Next End Sub

  • 「一定の時間間隔で5秒毎にマクロを実行する」

    Timer関数を使ったループ 「一定の時間間隔で5秒毎にマクロを実行する」 ようにしてMacro1を実行したいのですが、 うまくいきません。どう改変したらいいでしょうか。 Sub Macro2() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:01") 'インターバル1秒 Application.OnTime TimeValue("00:00:05"), "Macro1", TimeValue("00:00:01") End Sub

  • Windowsの時刻について

    私はプログラムの初心者です。 Windowsの正確な時刻をミリ秒レベルで取得するために”GetLocalTime”で取得しようと考えていたのですが、マイクロソフトのmsdnに システムが時刻を生成するのは毎秒 18 回です。したがって、Interval プロパティはミリ秒単位で設定されますが、間隔の真の精度は最大で 18 分の 1 秒です。 との記述があります。 上記であれば、約55.5ミリ秒毎にシステムの時刻を作成しているので、OSはどのようにして”GetLocalTime”で取得できるミリ秒の時間を作成しているのでしょうか。 実際に”GetLocalTime”で取得できるミリ秒での時刻の精度はどれ位なのでしょうか。 ”GetLocalTime”以外にOSの正確な時刻を取得する方法はあるのでしょうか。 宜しくお願い致します。

  • 1秒未満間隔のファイル更新について

    皆様 下記のようなプログラム(Perl)で、1秒未満のファイル更新を試みております。sleep(1)として、待ち時間を1秒とすると、data.txtに時刻が更新されますが、sleep(0.8)、sleep(0.5)等として待ち時間を1秒未満にすると、プログラムは動作するのですが、data.txtはファイルとして作成されません。 これは、printf()関数のバッファリング、及びフラッシュに関する仕様に起因するものと思われますが、1秒未満の間隔でdata.txtを更新して時刻をdata.txtに書き込む処理は可能でしょうか? #強制フラッシュの"$| = 1;"を使い、sleep(0.8)としても駄目でした。 すみませんが、よろしくお願いします。 (コード) #use Time::HiRes; #$| = 1; while(){ ($sec, $min, $hour, $day, $mon, $year) = localtime(time); open(OUT, "> data.txt"); printf(OUT "%2s:%2s:%2s\n", $hour, $min, $sec); close(OUT); sleep(1); }

  • ログ出力でミリ秒まで出したいのですが・・・

    Keil社のMDK-ARMというソフトウェアを使用してコーディングを行っているのですが、ログ出力で現在日付時刻を出力しようとした際、ミリ秒まで出せなくて困っています。 VCで同様のコーディングを行った際はGetLocaltimeが使えたので問題なかったのですが、こちらではWindows APIが使えないためGetlocaltimeが使えず今に至ります。 一応マニュアルやweb検索で何かないか探しているのですが今のところ使えそうな関数は見つかっていません。 知っている方、良ければ教えてくださいお願いします。 ちなみに開発環境のOSはWindows XPですが、動作OSは NORTi professional(μITRON4.0)を想定しています。