SEの技術メモ&戯言

http://naotorjp.exblog.jp/

API Reference ≫ C++ API reference
API Reference ≫ C++ API reference ≫ File Server Client Side
API Reference » Client/Server
 ・・・クライアント/サーバ関連クラス

[RFs][User]

                                                            • -

バージョンはいずれ統一する。

RDir
TEntryArray
TEntry
File or directory attributes
Directory entry details



<メモ>
http://www3.symbian.com/faq.nsf/0/A7B587C154A0654980256A570051BA37?OpenDocument
http://www.cs.helsinki.fi/u/mraento/symbian/bluetooth.html

ある処理をバックグラウンドで動作させようと考えているですが、
どうも処理の起動方法がわからない。
通常のアプリ立ち上げ手段はもろもろの事情で使えないっぽいので代用手段を考えた。

起動は、既存アプリから行う。
このアプリはすでに既存の起動することが出来るので、まぁここの起動に便乗しようというつもりなのだが、このアプリはどうもプロセスで起動されてるのか、フレームワークからスレッドで起動されているのか微妙。
Symbianは低コストをうたっているのであまりプロセスは望ましくない。
スレッドもしくはアクティブオブジェクトで実行することが望ましいが、
共にこのアプリから起動する場合、使えない気がする。
知識がないとどの方法が適切かわからないなぁ〜
ってことで、プロセスにしとく。
まぁ、プロセスだと立ち上げがめんどくさいが他を気にしなくていいのでその辺は楽だ。

で、RProcessクラスを調べてみる。


で実装してみた。
はい、立ち上がりません。

ライブラリエラー、もしくはサポートされてない旨のエラーが返ってくる。
例のごとくOSのエラーコードなので詳細不明。
経験のない自分にとってはこの情報での厳しいなぁ

で、四苦八苦

結局、エミュレータはその構造上、1プロセスでOS全体をエミュレートするためか、プロセスの作成は行えない。
まじで!?
と思うが、実機で同様のコードを確認したところ動作。
で実機とエミュレータでパスを変えていたため実機でのパスがおかしくなり
おそらくライブラリーエラー。
もしくは、ビルド?
ちょい不明だが現象が消えたので詳細は闇に葬って次へ

とりあえず、実機でプロセスは立ち上がった。
エミュレータでの動作確認は、スレッドを使った擬似ロジックを作ってからかぁ。

とりあえず、プロセスとスレッドの差分を埋めるロジックをプロセスの方に作ってからエミュレーターかなぁ

CleanupStackクラスを使用するためには
初期化処理と回収処理が必要。
詳細は書籍で、ポイントのみ。

CleanupStack::PushL()
CleanupStack::PopAndDestroy()
を使ってリーブする関数を囲むわけですが、
その関数を使用する前に

CTrapCleanup* cleanup = CTrapCleanup::New();
を実行し
__UHEAP_MARK;

__UHEAP_MARKEND
で囲み、
を実装している関数を
TRAP()で囲む。
cleanup を持ちまわる必要はない。

基本的に、スレッド・プロセスを作成した場合は、アクティブスケジューラーの起動が必要。
アクティブスケジューラーはスレッド毎に必要。

CAScheduler* self = new(ELeave) CAScheduler;
CleanupStack::PushL( self );
CActiveScheduler::Install( self );

<処理スタート>
self->関数()
 *関数内でアクシブオブジェクトの使用可
 *最低1つはアクティブオブジェクトを登録

CActiveScheduler::Start();
CleanupStack::PopAndDestroy( self );