- - PR -
前回の「並行処理の奥義、非同期フレームワークとは?」に引き続き、Symbian OSにおける非同期フレームワークを解説していきます。
非同期フレームワークは、
- 非同期要求
- 非同期の完了待ち
の2つに対する抽象化を実現するものです。このうち、非同期要求の抽象化については、
- なぜ必要か→ノンブロッキングなプログラミングを自然に行うため
- Symbian OSではどのようなメカニズムで実現されるのか→CActiveの派生クラスで実現
ということを前回説明しました。そこで今回は非同期処理の残り半分、「非同期の完了待ち」について解説していきます。
「非同期の完了待ちなんてどこのOSでもやってる話だし、別に書きたいように書けばいいんじゃないの? Symbian OSでは非同期処理さえやっておけば性能出るんでしょ。大丈夫、オレ前のOSじゃ非同期をきちんと書いてたんだから、前のスタイルでやらせてよ」−という話を、“マレ”では済まされない頻度で耳にします。残念ですが、こんな態度の人が存在すると、そのプロジェクトは破たんしたも同然です。
今回の目的は、もちろんSymbian OSにおける非同期フレームワークを紹介することにあります。しかし、例えばX Window System由来のコードをそのまま移植しようとする破壊分子がプロジェクトに現れたとき、説得(または撃退)する方法を伝えることも、また目的だったりします。え、実はまさにいま、X Window System由来のコードを移植しようとしているのですか? ……引き返す最後のチャンスです。よく注意して読んでください。
一般論としてのウェイトループ
ここでもう一度非同期処理のAPIシーケンスを考えてみます。
![]() |
| 図1 非同期型APIのシーケンス図 |
図1のシーケンス図はプログラムが動いている状態の図(UMLでいう「振る舞い図」)です。では、この動作を満たすプログラムはどんな形になるでしょうか。
複数の非同期要求の完了を、1回の関数発行で待つことができるAPI(以下、完了待ちAPI)が提供されているとします。すると、図1のクライアント側の動作を行う、最もシンプルなコードは以下のように構成できます。
while ( 1 ) { |
| 図2 完了待ちの抽象コード |
上記のコードでは、WaitForAnyRequest()が完了待ちAPIになります。この関数の名前などディテールの差異を除けば、この形のプログラムはそれほど奇抜な話ではありません。というより、Win32APIを生でたたいたことがある人や、X Window Systemのプログラムを書いたことがある人には、おなじみのスタイルのコードであるはずです(注1)。
ほかからのイベント(注2)が届くまで何らかの方法で待ち、届いたイベントに対するハンドラを呼び出す。それをプログラムが終わるまで繰り返す。このようなスタイルのコードをウェイトループといいます。非同期に到着したイベントを各ハンドラに振り分けるための、基本的な概念として知られています。基本的な概念? そう、ウェイトループをそのまま実装するには問題があるのです。
| 注1:Win32やX Window Systemの場合、else ifではなく、switch caseによる判定が一般的です。これは完了待ちAPIが一度に1つの完了しか拾わないことによります。このあたりはOSごとのデザインの差の部分です。ちなみにSymbian OSでは複数のイベントが同時に到着している可能性があるので、優先順位に従ってelse ifでイベントの判定を行うことになります。とはいっても、一度のWaitForAnyRequest()で処理してよいのは、1つの完了通知だということも申し添えておきます。 注2:Symbian OSにおける非同期要求に対する完了通知も、広義のイベントに含まれます。 |
関連記事 設計/開発技法
- 特集:Javaは組み込みに“不向き”は本当か?
- 連載:BREWアプリケーション開発入門(連載中)
- 連載:イチから作って丸ごと学ぶ! H8マイコン道(連載中)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:組み込みLinux開発入門(全3回)
- 連載:T-Engineプログラミング入門(全4回)
- 連載:Symbian OS開発の勘所(全10回)
- 連載:Symbian OSアプリ開発の手引き(連載中)
- 連載:解説! ロボット開発環境Robotics Studio(全4回)
- 連載:Robotics Studio活用術 はじめて作るサービス(全5回)
- 連載:生産性向上への道 Eclipseで行うC/C++開発(全4回)
ホワイトペーパー(TechTargetジャパン)
組み込み開発フォーラム 新着記事
- テストでの「ダメな猫」「普通の猫」「優秀な猫」(2010/3/19)
- 目指せETロボコン!! ライントレースとシステム制御(2010/3/18)
- ミップスとDMPがAndroid on MIPSで協業(2010/3/18)
- 【問題9】 アナログをデジタルに変換する「AD変換」(2010/3/17)
- 組み込みシステム開発における“モデル”とは?(2010/3/11)
- 組み込み向けAndroid「Embedded Master」を公開(2010/3/10)
- Androidでビジネス拡大を狙うミップスの新戦略(2010/3/9)
- MATLAB/Simulinkプロダクト・ファミリ R2010aを発表(2010/3/8)
- 各種カード決済/通信方式に対応した携帯型POS(2010/3/5)
- 【問題8】 「ウォッチドッグタイマ」の役割とは?(2010/3/4)
- アクテル、ミックスド・シグナルFPGA「SmartFusion」(2010/3/3)
- 素晴らしきファイルシステムのデータ管理(2010/3/2)













