ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 15:31

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - 高精度タイマーの使い方
作成者 メッセージ
  記事の件名:  Re: 高精度タイマーの使い方  引用付きで返信する
ありがとうございます。

とても参考になりました。

長時間動作させると、ハンドルリークが問題になりました。
メインタスクにてtimerIDを開放する必要が有りそうです。

難しいですねぇ・・・
投稿記事 Posted: 2020年3月01日(日) 13:03
  記事の件名:  Re: 高精度タイマーの使い方  引用付きで返信する
コード:
#N88BASIC

Type TIMECAPS
        wPeriodMin As Long
        wPeriodMax As Long
End Type
Const TIME_PERIODIC = 1

Declare Function timeGetDevCaps Lib "winmm.dll" (lpTimeCaps As *TIMECAPS, uSize As Long) As Long
Declare Function timeSetEvent Lib "winmm" (uDelay As DWord, uResolution As DWord, lpFunction As DWord, dwUser As *DWord, uFlags As DWord) As DWord
Declare Function timeBeginPeriod Lib "winmm" (uPeriod As DWord) As DWord
Declare Function timeEndPeriod Lib "winmm" (uPeriod As DWord) As DWord
Declare Function timeKillEvent Lib "winmm" (uTimerID As DWord) As DWord


Dim tc As TIMECAPS
Dim timerID As DWord
Dim res As Long
Dim count As DWord
Dim s As String


count = 0

timeGetDevCaps(VarPtr(tc), SizeOf(TIMECAPS))
Print "タイマー分解能"
Print "最小値=";tc.wPeriodMin
Print "最大値=";tc.wPeriodMax

timeBeginPeriod(tc.wPeriodMin)

res = 300'タイマ間隔

timerID = timeSetEvent(res, res,  AddressOf(TimerCallback), 0, TIME_PERIODIC)

Sub TimerCallback(id As DWORD, msg As DWORD, usr As DWORD, dw1 As DWORD, dw2 As DWORD)

	count = count + 1
	Print count ; "回タイマー呼ばれました"
	If count = 10 Then
		timeKillEvent(timerID)
		timeEndPeriod(tc.wPeriodMin)
		Print "タイマーおわり"
	End If
End Sub	

Sleep(res*11)
Print "なにかキーを押してください"
Input s
End
投稿記事 Posted: 2020年2月22日(土) 20:21
  記事の件名:  高精度タイマーの使い方  引用付きで返信する
SetTimer()を使用していましたが誤差が大きいので、高精度なタイマーの使い方(サンプル希望)を
教えていただけませんか。

timeSetEvent()またはCreateTimerQueue()を試そうと挑戦していますが、難しくて理解できません。
投稿記事 Posted: 2020年2月15日(土) 11:09

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean