高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1128
QDSwapPort


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 は、古いポートを記録し、(必要に応じて)新しいポートに変更し、ポートが実際に変更されたかどうかを返します。これにより、newPortsavePort が同じ場合は、余分な SetPort の呼び出しを省いて以前のポートを回復できます。また、QDSwapPort を 1 回呼び出すほうが、これが導入される前の呼び出しのペア(GetPortSetPort)を使うよりも常に速く処理できます。

以前のポートを気にしなければ、第 2 パラメタとして NULL を渡すことができます。

推奨される使用法については、リスト 2 を参照してください。


//    QDSwapPort を使ったポートの変更
CGrafPtr savePort;
Boolean portChanged = QDSwapPort(newPort, &savePort);

//  ここで新しいポートを設定する

if (portChanged)
{
    QDSwapPort(savePort, NULL);
}

リスト 2. QDSwapPort を使ったポートの操作




[2002 年 11 月 6 日]