デバッグ時のスレッドプライオリティ変更
WinCEデバイスのデバッグをしている時、スレッドプライオリティの値が適切かどうかが気になることがあります。WinCEはスケジューラがスレッドを管理していて、より優先度の高いスレッドのリクエストがあると、低位のスレッドを停止して高いものを実行します。このスレッドの優先度設定が不適切だと、本来はブロックしてはいけないスレッドを止めてしまうこともあるわけです。このような状況はカーネルトラッカを利用する事で発見することができます。
ところがこのスレッドプライオリティはCeSetThreadPriority関数で設定できるものの、調整するために毎回ビルドしていてはその作業効率は著しく落ちてしまいます。そこでデバッグ時に実行しながらスレッドプライオリティを変更したいと考えるのは普通ですが、どうもPlatform Builderではわかりやすいところにその手段が準備されていないようです。
Platform Builderでスレッドの状態を見るためには「Target」メニューから「CE Threads」を選択してスレッドの状態を確認できるウィンドウを開きます。これを見るとプロセスごとにスレッドのハンドルや、プライオリティを確認することができます。本当であれば、ここで「CurPrio」にマウスを移動し、右クリックで「プライオリティの変更」という項目が出てくればいいのですが、残念なことにそういう都合の良いものはありません。
ではデバッグ時にスレッドプライオリティを変更できないのか?というと、いえいえそういう事はありません。Platform Builderには「Target Control」という便利なものが準備されているのです。ここで「tp」コマンドを利用することでスレッドプライオリティを変更することができます。
tpコマンドの使い方はTarget Control上で?と入力すると、その他のコマンドと一緒に使い方を見ることができます。
tp <tid> [prio] : Sets/queries thread priority
tid : can be either a thread id, 'kitlintr' or 'kitltimer'
prio : thread priority
-1 or omitted : query current thread priority
0 - 255 : set thread priority
使い方はすごく簡単で、例えば「tp 0xa3eff892 200」というように入力するだけです。最初の0xa3eff892はターゲットのスレッドハンドル、200はスレッドプライオリティです。何か他のスレッドを邪魔していたり、他のスレッドよりも優先度を高くしたい場合に、このtpコマンドでちょっとお試しというのは結構便利な機能です。
でも、これがTarget Controlだけでサポートされているのはちょっと残念ですね。
« SANYO Xacti C6購入 | Main | Xacti C6その後 »
The comments to this entry are closed.
Comments