VisualAge C++ 自家版FAQ

たんなるメモです ^^;


OpenClassLibrary編




Q-001:OpenClassLibraryでタイマを使うには?(ハンドラではなくITimer Classを使う方法)
マニュアルではPMとAIXのタイマを使った例が載っていますが、
ITimer::start( ITimerMemberFn<クラス名>, 起動メソッド );でタイマを動かせばできます。
ITimerMemberFnはテンプレートです。

#ifndef _IBASE_
  #include <Ibase.hpp>
#endif
#include <istdntfy.hpp>
#include <itime.hpp>
#include <itimer.hpp>  <--  ITimerクラス
#include <iapp.hpp>
#include <istattxt.hpp>
#include <iframe.hpp>
#include <stddio.h>

//*--------------------------------------------------------------------
//*  ITimerと ITimerMemberFnを使ったサンプル
//*--------------------------------------------------------------------
class MyTimer {
public:
    MyTimer(IStaticText* itext):
        text(itext),
        str(ITime().asString("%H:%M:%S") )
    {
        ITimer timer;  //タイマー作成。デフォルトは1秒間隔
        // タイムアウトする毎に呼び出してもらう関数を登録
        timer.start( new ITimerMemberFn<MyTimer>this, MyTimer::tick) );
        text->etText(str);
    }

    void
    tick( unsigned long timerId )
    {
        str = ITime().asString("%H:%M:%S") ;
        text->etText(str);
    }

protected:
    IString  str;
    IStaticText* text;
};

//*--------------------------------------------------------------------
int main()
{
    IFrameWindow mainWindow ("ITimer Sample", 0x1000);
    IStaticText timeMsg(0x8008, &mainWindow, &mainWindow);
    MyTimer myTimer(&timeMsg);
    timeMsg.setAlignment(IStaticText::centerCenter);

    mainWindow.setClient(&timeMsg);
    mainWindow.sizeTo(ISize(200,140));
    mainWindow.setFocus();
    mainWindow.show();
    IApplication::current().run();

    return 0;
} /* end main */


最終更新日: 2000/02/06 Sun

質問・感想・苦情・激励は E-mail: vette@mail.ne.jp まで。
©vette 1997-2004