2006年02月13日

非同期の処理

例えば、Series60を用いてネットワークを用いたサーバアプリケーションを構築するとしましょう。この際、サーバはクライアントからの接続を待つ必要があります。この「接続を待つ」という行為は明確なタイミングがわかっているものではありません。このような場合、通常は別にスレッドを立て、クライアントからの接続を監視させる事を考えると思います。

また、同一アプリケーションで何らかの時間のかかる処理を走らせている間もユーザーの入力は受け付けなくてはいけないという状況はあるはずです。このような場合も普通に考えるのであれば別にスレッドを立てると思います。今回は、上記のような状況を一般に「非同期の処理」と呼び、その処理をSeries60 上で実現する方法を見てみたいと思います。

マルチスレッドは使用しない?

 Series60では、マルチスレッドを用いたプログラムが可能になっております。しかし、ここで紹介する方法は、マルチスレッドの使用方法を説明するものではありません。スレッドはあくまでもメインのスレッド1本です。非同期の処理を実現するのにスレッドを用いないのは「Series60ではマルチスレッドを用いたプログラムが推奨されない」点に理由があります。マルチスレッドを用いることが推奨されない理由としては

* コンテキストスイッチの切り替えなど、マルチスレッドはリソースを多く消費する
* デットロックの回避等、マルチスレッド特有の問題に対処しなくてはならない

などが挙げられます。

 推奨しないからには、スレッドに変わる非同期の処理を行う機構が必要です。これが「アクティブオブジェクト」と「アクティブスケジューラ」になります。

アクティブオブジェクトとアクティブスケジューラ

 アクティブオブジェクトとアクティブスケジューラは、アプリケーションフレームワークの中で使用されるクラスです。各々の詳細を挙げると、

アクティブスケジューラ
各イベントに応じてアクティブオブジェクトのスケジューリングを行う。アクティブスケジューラ は1つのスレッドにつき1つのみ存在できる。
アクティブオブジェクト
アクティブスケジューラから呼び出され、非同期の処理を行う実体であり、コールバックの関数としてRunL()関数を持つ。

となります。

 つまり「アクティブスケジューラは簡単なスケジューリングを提供する。スケジューリングの対象がアクティブオブジェクトになる」と見ることができます。さらに言えば、「Series60のアプリケーションは、SymbianOSが提供するプロセスごとのスケジューリングと同時に、アプリケーションフレームワーク内部でも各スレッドごとにアクティブスケジューラが行うスケジューリングがある」ということができます。
posted by シンビアン at 21:03| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


※画像の中の文字を半角で入力してください。

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

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