![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
SFXTimer はタイマーを扱うクラスです。
例 19.8. SFXTimer クラスの使い方
// タイマーはクラスのメンバ変数として定義する class MyClass { private: SFXTimer _timer; public: Void Start(Void); // コールバック関数 XALLBACK_DECLARE_SFXTIMER(OnTimer) }; Void MyClass::Start(Void) { SFCError error; // タイマーにより呼び出される OnTimer 関数を設定する _timer.Set(XALLBACK_FUNCTION(OnTimer)); // タイマーをセットする // (1000 ミリ秒後に OnTimer 関数が呼び出される ) error = _timer.Schedule(1000); if (error != SFERR_NO_ERROR) { // エラーのとき ( OnTimer 関数は呼び出されない ) } } // タイマーによって呼び出されるコールバック関数 XALLBACK_IMPLEMENT_SFXTIMER(MyClass, OnTimer) { TRACE("timer"); // 以下のコードを追加すると、1000 ミリ秒毎にタイマーが呼び出されるようになる // _timer.Schedule(1000); }
![]() |
SFXTimer クラスのインスタンスの保持 |
|---|---|
タイマーを利用しているときは、 SFXTimer クラスのインスタンスを解放してはいけません。 | |
SFXTimer のデストラクタでも SFXTimer::Cancel 関数が呼ばれます。
BREW 環境では、約 1 秒以内で処理を終える必要があります。 そのため、1 秒以上時間がかかる処理は 1 秒以内で終了する処理に分割し、SFXTask クラスを使って 実行します。
例 19.10. タスク分割
// SFXTask はクラスのメンバ変数として定義する class MyClass { private: SFXTask _task; SInt32 _index; SInt32 _sum; public: Void Start(Void); SInt32 Calculate(SInt32 index); // コールバック関数 XALLBACK_DECLARE_SFXTASK(OnTask) }; Void MyClass::Start(Void) { SFCError error; _index = 1; _sum = 0; // BREW 環境から呼び出される OnTask 関数を設定する _task.Set(XALLBACK_FUNCTION(OnTask)); // タスクを登録する error = _task.Schedule(); if (error != SFERR_NO_ERROR) { // エラーのとき ( OnTask 関数は呼び出されない ) } // このコードが終了すると、制御が BREW 環境に戻り、 // 暫くすると BREW 環境から OnTask 関数が呼び出される } // 時間のかかる計算 SInt32 MyClass::Calculate(SInt32 index) { SInt32 i; for (i = 0; i < 5000000; ++i) { ; } return index; } // コールバック関数 ( BREW 環境から呼び出される ) XALLBACK_IMPLEMENT_SFXTASK(MyClass, OnTask) { SFCError error; if (_index <= 100) { // 計算を 100 回に分割して行う // _index 回目の計算を行う _sum += Calculate(_index); ++_index; // 再びタスクを登録する ( BREW 環境から OnTask 関数が再び呼び出される ) error = _task.Schedule(); if (error != SFERR_NO_ERROR) { // エラーのとき ( OnTask 関数は呼び出されない ) } } else { // 結果を表示する TRACE("%d", _sum); } }
このコードは以下のコードと同じ計算をします。
SInt32 i;
SInt32 sum = 0;
for (i = 1; i <= 100; ++i) {
sum += Calculate(i);
}
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|