[ブログに戻る](/ja/blog) # Teighaマルチスレッド低レベルAPI（4部構成の第3部）

Andrew Markovich 2月 20, 2018 [\#performance](/ja/blog/tag/performance) [\#Example](/ja/blog/tag/example) [\#getting started](/ja/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

この記事は、マルチスレッドに使用される低レベルAPIに関するシリーズの一部です。以前の記事については、[パート1](https://www.opendesign.com/blog/2018/january/teigha-multithreading-low-level-api-part-1-4)と[パート2](https://www.opendesign.com/blog/2018/february/teigha-multithreading-low-level-api-part-2-4)を参照してください。

#### 組み込みのTeighaスレッドIDアクセサー

各スレッド（メインプロセススレッドを含む）は、どのオペレーティングシステム上でも一意のオペレーティングシステムアトムとして表現されるため、独自の一意のシステムレベルIDを持っています。スレッドIDの可用性は、スレッドとプロセスを開始するフレームワークの複雑さに依存しません。これは、たとえば、.NET Frameworkオブジェクトを使用してスレッドが開始された場合でも、そのスレッドには基になるネイティブコードからアクセスできる一意のシステムレベルIDが含まれることを意味します。

スレッドIDは、スレッドカウンターによって外部スレッドとの通信に使用されます。

現在Teighaコードを実行している任意のスレッドから、TeighaクロスプラットフォームのodGetCurrentThreadId関数を使用して現在のスレッドIDにアクセスできます。

```
FIRSTDLL_EXPORT unsigned          odGetCurrentThreadId();

```

このIDは、Teighaスレッドカウンターオブジェクト内でスレッドを識別するために使用できます。

#### odGetCurrentThreadId()関数の使用例

ミューテックスオブジェクトに関する[パート2](https://www.opendesign.com/blog/2018/february/teigha-multithreading-low-level-api-part-2-4)からのコンソール出力を拡張します。ProcessImageCaller::entryPointメソッド内の出力文字列を拡張して、処理されたスキャンライン情報とともに現在のスレッドIDを出力します。

```
pCaller->m_pOutput->addString(OdString().format(OD_T("Thread %u processed scanlines from %u to %u\n"),<br></br>
::odGetCurrentThreadId(), (unsigned)pCaller->m_scanLineFrom, <br></br>
(unsigned)(pCaller->m_scanLineFrom + pCaller->m_nScanLines - 1)));

```

これで、サンプルアプリケーションのコンソール出力は次のようになります。

4つのファイルが0.413389秒でロードおよびレンダリングされました  
スレッド8240は0から255までのスキャンラインを処理しました  
スレッド7508は256から511までのスキャンラインを処理しました  
スレッド8776は768から1023までのスキャンラインを処理しました  
スレッド10040は512から767までのスキャンラインを処理しました  
最終ラスタ画像は0.543844秒で処理されました

アトミック操作とマルチスレッド低レベルAPIの使用に関するこのシリーズの最終記事にご注目ください。

## 今すぐ始める

**ODAソフトウェアを60日間無料でお試しください。  
リスクなし、クレジットカード不要。**

[無料で試す](https://www.opendesign.com/ja/free-trial)
