[ Home | Programming Tips | Mail ]

Exception from OS Callback


OS Callback中での C++ Exception

 OSの Callback中から Callbackの外へ C++ Exceptionを throwしてはいけません。Cの longjump()で Callback外へ jumpするのも同じくだめです。
 少し考えれば理由は解りますが、C++の Exceptionは OSレベルのサポートではありませんので勝手に Stackを Rewindしてもつじつまが合う保証はありません。また仮に Stack等 Low Levelでのつじつまが合ったとしても OSが Callbackを呼ぶため等に設定した内部 Stateをそのままにしますので、どこかで破綻を来して Crashします。

 必ず以下の様に Codingし全ての Exceptionを catchして returnします。

    pascal  Boolean AlertFilter(DialogPtr inAlert,...)
    {
    Boolean   eventHandled = false;
 
      try {
        // do some PowerPlant operations
        //		:
        //		:
      }
      catch (...) {
        // eat all exceptions
      }
 
      return eventHandled;
    }


この Pageは MacOS X + Radio UserLand で作っています。