2006年02月15日

アクティブオブジェクトを用いたタイムカウンタアプリケーションのサンプル

それでは、アクティブオブジェクトと用いたサンプルとして、簡単なタイムカウンタのアプリケーションを見ていきましょう。このサンプルプログラムは、並行処理が必要なプログラムとなっています。バックエンドではタイマーの処理を、フロントエンドではユーザーからの操作を受け付けています。[activetest.zip]

 今回のサンプルも、前回以前と同様にダウンロードしてビルドしますと、次のようなアイコンが追加されます(画面1)。


 このアプリケーションを起動し、次に[オプション]から[タイマーのスタート]を選択すると、下図のような画面が現れて1秒ごとに時間経過をカウントしていきます(画面2)。


 さらに、[オプション]から[タイマーの停止]を選択すると次のような画面になり、タイマを停止します(画面3)。


 先ほども述べたとおり、Series60ではマルチスレッドのアプリケーションは推奨されていません。今回のサンプルでは、この1秒おきの通知をアクティブオブジェクトで受け取り、スレッドはあくまでも一本になります。

アクティブオブジェクトの作成と登録まで

 次に、アクティブオブジェクトの作成と登録までを見ていきましょう。先ほど述べた通り、アクティブオブジェクトは必ずCActiveクラスを継承して作成されます。今回のサンプルでは、アクティブオブジェクトとなるクラスは次のように宣言されたCactiveTestクラスになります。

class CActiveTest:public CActive
{
public:
CActiveTest(); // コンストラクタ
~CActiveTest(); // デストラクタ
void ConstructL(CEikLabel* ,
CActiveTestContainer*); // 第二フェーズコンストラクタ
void After(); // タイマー開始関数
TBool IsRunning();
void RunL(); // コールバックの関数
void DoCancel(); // キャンセル時に呼び出される関数
protected: // data
// RTimerのインスタンス
RTimer iTimer;
CEikLabel* label ; // 時間を表示するラベル
/// 以下省略
};

 このCActiveクラスのコンストラクタにおいて、このアクティブオブジェクトの優先度の設定とアクティブスケジューラへの登録が行われています。

CActiveTest::CActiveTest():
CActive(EPriorityStandard)
// EPriorityStandard は優先度が通常のものであることを表す。
{
// 中略
CActiveScheduler::Add(this);
// 自分自身をアクティブスケジューラに追加
}

 先ほども述べたとおり、アクティブスケジューラへの登録はCActiveScheduler::Add関数で行われます。
posted by シンビアン at 13:48| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/13315548

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。