スレッドローカル変数を使用する
スレッド関数とそこから呼び出されるあらゆるルーチンには、他のあらゆる Dephi 言語ルーチンと同様に、独自のローカル変数があります。また、これらのルーチンでは任意のグローバル変数にアクセスすることもできます。実際、グローバル変数はスレッド間通信のための強力なメカニズムとなります。
しかし、時には、スレッド内で実行されるすべてのルーチンに対してはグローバルでも、同じスレッド クラスの他のインスタンスとは共有されないような変数を使用した方がよい場合もあります。そのような場合には、スレッドローカル変数を宣言します。threadvar セクションで宣言することにより、変数をスレッドローカルにします。以下に例を示します。
threadvar
x : integer;
int __thread x;
上記では、アプリケーション内のスレッドごとにはプライベートでも、各スレッド内ではグローバルとなるような整数型変数を宣言しています。
threadvar セクションは、グローバル変数にのみ使用できます。ポインタ変数や関数変数はスレッド変数にはできません。長い文字列など、コピーオンライト(書き込み時コピー)セマンティクスを用いる型もスレッド変数にはなりません。