[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 656] OSASKアプリケーションのマナー.



  こんにちは、川合です。

  今日は、OSASKアプリケーションが身につけておいた方が良いマナー
についてのお話です。

  年内には、OSASKアプリケーションが誰にでもかける環境がそれなり
に整うわけですが、それまでには、以下のことを良く知っておいてもら
いたいのです。

  OSASKでは、キー入力をはじめとして、ほとんどの「イベント」がタ
スク間通信によって伝達されます。このタスク間通信の使い方に対応で
きないと、まともなゲームは作れません(キーもマウスも使わずにゲー
ムができると思いますか?)。しかし、タスク間通信をマスターしなく
ても、ゲームが作れないというわけではありません。それについては、
このメールの最後のほうで明らかになります。

  タスク間通信によってメッセージが届けられたときにどうするかを、
以下のアクションから選べます。

  1.何もおきない。
  2.ローカルレベルが自動変更される。
  3.メッセージ処理関数が呼び出される。
  (2と3は同時併用も可能)

  これらのアクションのうちどれにするかは、プログラマーによって決
定されます。また、メッセージの内容によって、アクションを選択させ
ることも可能です。

  理想的なアプリケーションは、常に何らかの仕事をしていて、メッセ
ージが来たらすぐに応対します。したがって、アクションは2+3を選
択します。ローカルレベルを変更するのは、できるだけ速くメッセージ
に応えるためで、自分に許されている中でもっとも高速なレベルを選択
するわけです。タスク間通信用のバッファは小さくはありませんが、有
限であり、あまりにも長い間放っておくとあふれてしまうかもしれませ
ん。しかし、この3のように、任意の時点で特定の関数が呼び出される
という「割り込み処理」のプログラムは、普通のプログラムに馴れてい
る人には難しく感じるかもしれません。ですから、無理してまで、この
モードを利用しなくてもいいです。

  3Dばりばりのゲームじゃない限り、たいていのゲームは2だけでや
っていけます。これはどういう事かというと、暇になったら、タスク間
通信バッファをチェックする、というただそれだけのことです。何かメ
ッセージがあれば処理するし、なければローカルレベルを最低に下げ、
冬眠します。このタスクは動いているときは常に全力ですが、イベント
待ちのときはかならずスリープしているので、負荷も十分に小さく、決
して無作法ものではありません。イベントには、キー入力だけでなくタ
イマーも使えますから、キー入力していなくてもタイマーによってちょ
くちょく目覚めて、ゲームを進行させられます。

  そして、一番悪いのは、ローカルレベルの制御すらやらないタスクで
す。つまり、メッセージがなくなってもスリープしません。通信バッフ
ァチェックのシステムコールを発し続け、見張ります(ポーリング)。
こういうタスクが居ると、CPU負荷は常に100%になります。まあ、別に
100%になったからといって他の処理ができなくなるというわけじゃな
いですが、癪(しゃく)ですね。

  タスク間通信によって運ばれてくるメッセージにはいろんなものがあ
ります。しかし、基本的に不要なものは送られてきません。たとえば、
テンキーしか使わないゲームなら、アルファベットキーの入力は統合入
力ドライバーの段階でカットされ、送られてこないのです。タイマーも
、使わなければメッセージは来ません。

  タスクの終了要求への応答やウィンドウ管理など、ほぼ決まりきった
処理について、自前で処理するのが面倒なら、DLLに任せてしまうこと
ができます。キー入力管理やマウス管理もDLL任せにできます。これら
のDLLを使えば、タスク間通信バッファにまつわるややこしいことを気
にしないで、いたって普通のプログラミングができます。これらのDLL
にローカルレベルの管理も任せることができます。そうすれば、古いBA
SICのような、キー入力を待ったり、10秒間waitするなどといった書き
方でプログラムを作ることができますし、VBなどのようにイベントに応
じる関数をべったりと並べるプログラミングもできます。どちらの書き
方でも、CPU負荷はきちんと抑えられて、好ましい結果になります。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/