タイマー:Win32 API 版

2017-02-20 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
ふとしたことから、
IUP(Portable User Interface)”の、
IDLE_ACTION」ページの一番下から、
IupTimer」を見つけた。

 IupTimer
 Creates a timer which periodically invokes a callback when the time is up.
=== ( Google 翻訳 )
 タイムアップ時に定期的にコールバックを呼び出すタイマーを作成します。

それで、
(何故か) MSDN を見に行った:
SetTimer 関数 - MSDN - Microsoft

 SetTimer
 指定されたタイムアウト値を持つ 1 個のタイマを作成します。
 ・・・・・
 ・・・・・
 ・・・・・
 ・・・・・
  (一番下)
 参照
 KillTimer, , TimerProc,

から、
TimerProc」をみた。

以上から、タイマーについて学習した?
ので、
GSL Shell で、一本作ってみた:

“キーボードからの1文字入力待ち”の間、
200mS 間隔でカウントアップして印字する。
-------------------------- test_Timer.gsl
NULL = ffi.cast( 'void*', 0 )
ffi.cdef[[
typedef void ( __stdcall* T_Proc )( void* hWnd, int Msg, int id, int time );
int SetTimer( void* hWnd, // window handle
int nIDEvent, // timer ID
int uElapse, // time-out value ( ms )
void* func // callback function
);
]]
------------------------------------------------------------
TCB = ffi.cast( 'T_Proc', function( a, b, c, d )
i=i+1
print( i, a, b, c, d ) -- i, hWnd: NULL, 275, aaa, time
end )
i=0
aaa=ffi.C.SetTimer( NULL, 0, 200, TCB )
print(aaa)

_=io.read(1)

print( i )
の様なもの。

でも、これではタイマーが働いていない???


ハタと気が付いた。

  hWnd
  タイマに関連付けるべきウィンドウのハンドルを指定します。
  このウィンドウは、呼び出し側のスレッドが所有しているもの
  でなければなりません。
  NULL を指定すると、どのウィンドウにも関連付けられていない
  タイマが作成され、nIDEvent パラメータは無視されます。

とあるのだが、

  どの窓にも関連付けられていない

とは云っても、“何かしらの窓”が必要なのでは???


そこで、以下の様にメッセージボックス表示を追加してみた:
-------------------------- test_Timer.gsl
charA = |s| ffi.cast( 'char*', s )
NULL = ffi.cast( 'void*', 0 )
ffi.cdef[[
int MessageBoxA( int, char*, char*, int );

typedef void ( __stdcall* T_Proc )( void* hWnd, int Msg, int id, int time );
int SetTimer( void* hWnd, // window handle
int nIDEvent, // timer ID
int uElapse, // time-out value ( ms )
void* func // callback function
);
]]
------------------------------------------------------------
TCB = ffi.cast( 'T_Proc', function( a, b, c, d )
i=i+1
print( i, a, b, c, d ) -- i, hWnd: NULL, 275, aaa, time
end )
i=0
aaa=ffi.C.SetTimer( NULL, 0, 200, TCB )
print(aaa)

ffi.C.MessageBoxA( 0, charA('実行中'), charA('Timer'), 0 )

print( i )
の様に。

これだと、正常(意図した通り)に動きました。


本日はここまで。


タイマー 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170123,29
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク