たびたび失礼します。OnTimerを使おうと思うのですが、今まで使った関数ではクラス名が~Viewだったのですが、僕の持っている本でOnTimerが使われてるところをみるとクラス名のところが~Frameになっているのですが、OnTimerはFrameで使うのでしょうか?詳しい方がいましたら、どうゆう点で使い分けるのか詳しく教えてほしいです
Halです。
OnTimer()は、WM_TIMERというイベントが発生した時に呼び出される関数ですから、
別にクラスは関係ないですよ。
ようは、SetTimer()関数で設定したウィンドウに対してWM_TIMERイベントが入ってくる
わけです。
ウィンドウって何かということをきっとコウさんは理解されていないと思うので上の
文章が何のことを言っているのかわからないと思いますので、もっと簡単に書くと
ViewクラスでSetTimer()関数を使ってWM_TIMEイベントを取得する設定をしたら
OnTimer()関数はViewクラスに、MainFrameクラスでSetTimer()関数を使ってWM_TIMER
イベントを取得する設定をしたらOnTimer()関数は、MainFrameクラスになります。
予断ですが、Windowsのプログラムは以前にも書きましたが、イベントドリブン型の
プログラミングです。イベントが発生して初めてプログラムはそのイベントにしたがって
動作します。
イベントがどこに渡されているのかは、ウィンドウハンドルによって決まっています。
ようは、指定されたウィンドウに対して指定したイベントが渡されているわけです。
予断ですが、ボタン、エディットコントロールなどのコントロールも全てウィンドウ
何ですよ。
それでは。
コウさんがやりたいことを実現できるように設計すれば良いのです。
例えば、3秒に1回Viewクラスの関数を呼びたければC???View::OnTimer()として
実装すればよいでしょうし、CMainFrameクラスの関数を呼びたければ
CMainFrame::OnTImer()を実装すれば良い。 といった具合です。
おじゃまします。この関数で質問なんですが、OnTimer関数をViewで実装してPCカードに入ってくるデータを
取得し表示するプログラムを組んだのですが、イベント発生時間が遅いらしくデータとびしてしまってます。
SetTimerで設定する時間は、最高でどのくらいの時間でイベントを発生させることができるのですか?
実際には、PCカードにデータが200nsで通信されているみたいなので、できれば、PCカードがもつアドレスのデータが
書き換わったらViewか、Docの関数を呼び出したいと思っているのですが なにかよい方法はありませんでしょうか。
よろしくお願いします。
>おじゃまします。
今後は新規に発言してください。
>SetTimerで設定する時間は、最高でどのくらいの時間でイベントを発生させることができるのですか?
良くても55msecの分解能といわれているようです。
それから、タイマーイベントは他が忙しいとキューに溜まるので、この点も注意しなければなりません。
というわけで、今回の用途にはOnTimer()は不向きだと思います。
Sleep()を使うか、適当なダミー処理を入れて時間を稼ぐくらいになるのでしょうか。
#200nsecだったらほとんど待ち時間無しで読めば、いけそうな気もします。
今後は、新規で発言いたします。すいません。
ありがとうございました。