Q:
QDSwapPort とは何ですか?また、これを使う理由は何ですか?
A:
Mac OS X よりも前は、カレントポートの設定は、簡単なメモリアクセスを必要とするだけの安価な処理でした。Mac OS X では、カレントポートの設定には常に関数呼び出しが必要であり、場合によってはスレッドごとにグローバル変数にアクセスする必要もあるため、ポートの変更にかかるコストは、無視できなくなっています。従来の方法によるポート設定の例については、リスト 1 を参照してください。
// QDSwapPort を使わないポートの変更
CGrafPtr savePort;
GetPort( &savePort );
SetPort( newPort );
// ここで新しいポートを設定する
SetPort( savePort );
| |
リスト 1. 従来の形式による QuickDraw のポートの操作
|
Mac OS X 10.1 で導入された QDSwapPort は、古いポートを記録し、(必要に応じて)新しいポートに変更し、ポートが実際に変更されたかどうかを返します。これにより、newPort と savePort が同じ場合は、余分な SetPort の呼び出しを省いて以前のポートを回復できます。また、QDSwapPort を 1 回呼び出すほうが、これが導入される前の呼び出しのペア(GetPort と SetPort)を使うよりも常に速く処理できます。
以前のポートを気にしなければ、第 2 パラメタとして NULL を渡すことができます。
推奨される使用法については、リスト 2 を参照してください。
// QDSwapPort を使ったポートの変更
CGrafPtr savePort;
Boolean portChanged = QDSwapPort(newPort, &savePort);
// ここで新しいポートを設定する
if (portChanged)
{
QDSwapPort(savePort, NULL);
}
| |
リスト 2. QDSwapPort を使ったポートの操作
|
[2002 年 11 月 6 日]
|