表17-5は、この項で説明しているスレッド管理関数を示しています。
表17-5 スレッド管理関数
関数 | 用途 |
---|---|
|
スレッド・ハンドルをクローズします。 |
|
新しいスレッドを作成します。 |
|
コールが行われたスレッドのOCIThreadHandleを取り出します。 |
|
スレッド・ハンドルの破棄および割当て解除を行います。 |
|
スレッド・ハンドルの割当ておよび初期化を行います。 |
|
スレッドIDの破棄および割当て解除を行います。 |
|
コールが行われたスレッドの |
|
スレッドIDの割当ておよび初期化を行います。 |
|
特定の |
|
2つの |
|
|
|
指定された |
|
OCIThreadコンテキストを初期化します。 |
|
アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。 |
|
コール側スレッドから別のスレッドに結合できるようにします。 |
|
|
|
コール側スレッドのキーの現在の値を取得します。 |
|
キーを作成します。 |
|
コール側スレッドのキー値を設定します。 |
|
コールが行われたスレッドに対してmutexを取得します。 |
|
mutexの破棄および割当て解除を行います。 |
|
mutexの割当ておよび初期化を行います。 |
|
mutexを解放します。 |
|
OCIThreadプロセスの初期化を行います。 |
|
OCIThreadコンテキストを解放します。 |
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
クローズするOCIThreadスレッド・ハンドルです。
コメント
tHnd
パラメータは、OCIThreadHndInit()を使用して初期化する必要があります。同一OCIThreadCreate()コールから戻されたスレッド・ハンドルおよびスレッドIDは、OCIThreadClose()
コール後はどちらも無効になります。
構文
sword OCIThreadCreate ( void *hndl, OCIError *err, void (*start) (void *), void *arg, OCIThreadId *tid, OCIThreadHandle *tHnd );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
新しいスレッドが実行を開始する関数です。
start
が指し示している関数に渡す引数です。
NULL
でない場合は、新しいスレッドにIDを取得します。
NULL
でない場合は、新しいスレッドにハンドルを取得します。
コメント
arg
から渡された引数を使用して、start
が指し示している関数コールを実行すると、新しいスレッドが開始します。その関数が復帰すると、新しいスレッドは終了します。関数は値を戻さず、パラメータvoid
を受け入れます。tHnd
がNULL
以外の場合にかぎり、OCIThreadCreate()
コールはOCIThreadClose()コールに一致する必要があります。
tHnd
がNULL
の場合は、生成されるスレッドの終了のタイミングが不明のため、*tid
内に配置されたスレッドIDはコール側スレッドでは無効になります。
tid
パラメータはOCIThreadIdInit()によって初期化し、tHnd
はOCIThreadHndInit()によって初期化します。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
NULL
以外の場合は、スレッドのスレッド・ハンドルを配置する場所です。
コメント
tHnd
パラメータは、OCIThreadHndInit()を使用して初期化する必要があります。
この関数によって取り出されるスレッド・ハンドルtHnd
は、使用後にOCIThreadClose()を使用してクローズし、OCIThreadHndDestroy()を使用して破棄する必要があります。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
破棄するスレッド・ハンドルへのポインタのアドレスです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
初期化するスレッド・ハンドルへのポインタのアドレスです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
破棄するスレッドIDへのポインタです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
コール側スレッドのIDを配置する場所を指し示す必要があります。
コメント
tid
パラメータは、OCIThreadHndInit()を使用して初期化する必要があります。OCIThreadがシングル・スレッド環境で使用されている場合、OCIThreadIdGet()
はtid
で指し示される場所に常に同じ値を配置します。その値自体は重要ではありません。重要なのは、この値がNULL
スレッドIDとは異なる値で、常に同じ値であるということです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
初期化するスレッドIDへのポインタです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
チェックするOCIThreadId
へのポインタです。
結果へのポインタです。
コメント
tid
がNULL
スレッドIDの場合、result
はTRUE
に設定されます。それ以外の場合、result
はFALSE
に設定されます。tid
パラメータは、OCIThreadIdInit()を使用して初期化する必要があります。
構文
sword OCIThreadIdSame ( void *hndl, OCIError *err, OCIThreadId *tid1, OCIThreadId *tid2, boolean *result );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
最初のOCIThreadId
へのポインタです。
2番目のOCIThreadId
へのポインタです。
結果へのポインタです。
コメント
tid1
およびtid2
が同じスレッドを表す場合、result
はTRUE
に設定されます。それ以外の場合、result
はFALSE
に設定されます。tid1
とtid2
の両方がNULL
スレッドIDの場合、result
パラメータはTRUE
に設定されます。パラメータtid1
およびtid2
は、OCIThreadIdInit()によって初期化します。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
設定後のOCIThreadId
の場所を指し示す必要があります。
設定前のOCIThreadId
を指し示す必要があります。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
NULL
スレッドIDを設定するOCIThreadId
を指し示す必要があります。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
コメント
戻されたポインタが指し示しているメモリーを、OCIThreadクライアントから検査しないでください。同時にOCIThreadInit()
コールを実行してください。OCIThreadProcessInit()と異なり、他のコールより先に初期コールを行う必要はありません。
OCIThreadInit()
の1回目のコールでは、OCIThreadコンテキストが初期化されます。また、そのコンテキストへのポインタを、システム情報も含めて保存します。2回目以降のOCIThreadInit()
コールでは、同じコンテキストが戻されます。
各OCIThreadInit()
コールは、結果的にOCIThreadTerm()コールに合致する必要があります。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
結合するスレッドのOCIThreadHandle
です。
コメント
この関数は、指定されたスレッドが終了するまでコール元をブロックします。
tHnd
パラメータは、OCIThreadHndInit()を使用して初期化する必要があります。複数のスレッドをすべて同一のスレッドに結合した場合、結果は保証されていません。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
キーを破棄するOCIThreadKey
です。
コメント
これは、キー作成ルーチンに渡されるデストラクタ関数コールバックとは異なります。関数OCIThreadKeyDestroy()
は、OCIThreadがkey
を作成する際に取得したすべてのリソースを終了させるのに使用します。OCIThreadKeyInit()のOCIThreadKeyDestFunc
コールバックは、キー値デストラクタです。キー自体では動作しません。
この関数は、キーの使用が終了した後でコールする必要があります。OCIThreadKeyDestroy()
関数をコールしないと、メモリー・リークが発生する可能性があります。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
キーです。
スレッド固有のキー値を配置する場所です。
コメント
OCIThreadKeyInit()を使用して作成されなかったキーに対して、この関数は使用しないでください。
コール側スレッドからキーに値が割り当てられていない場合は、pValue
が指し示す場所にNULL
が配置されます。
構文
sword OCIThreadKeyInit (void *hndl, OCIError *err, OCIThreadKey **key, OCIThreadKeyDestFunc destFn );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
新しいキーの作成を行うOCIThreadKey
です。
キーのデストラクタです。NULL
でもかまいません。
コメント
このルーチンをコールするたびに、他のキーと異なる新しいキーの割当ておよび生成が行われます。この関数が正常に実行されると、割当ておよび初期化が行われたキーへのポインタが戻されます。このキーは、OCIThreadKeyGet()およびOCIThreadKeySet()とともに使用します。すべてのスレッドで、このキーの初期値はNULL
です。
この関数を、key
パラメータに同じ値を指定して、複数回コールしないでください。
destFn
パラメータがNULL
以外の場合は、キーの値がNULL
以外のスレッドが終了するたびに、destFn
によって指し示されているルーチンがコールされます。そのルーチンがコールされるときのパラメータは、1つです。そのパラメータは、スレッド終了時のそのスレッドに対するキーの値です。キーにデストラクタ関数が不要な場合は、destFn
にNULL
を渡します。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
キーです。
キーに設定するスレッド固有の値です。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()のコールによって診断情報を取得できます。
取得するmutexです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
破棄するmutexです。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
初期化するmutexです。
コメント
すべてのmutexは、使用する前に初期化する必要があります。
複数のスレッドから同時に1つのmutexを初期化しないでください。また、mutexは、破棄されるまで初期化しなおさないでください(OCIThreadMutexDestroy()
を参照)。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
解放するmutexです。
コメント
この関数をコールする必要があるかどうかは、OCIThreadの使用方法によって決まります。
シングル・スレッド・アプリケーションでは、この関数は必要に応じてコールします。コールする場合、1回目のコールは、他のOCIThread関数のコールよりも先に行う必要があります。この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。
マルチスレッド・アプリケーションでは、この関数は必ずコールする必要があります。1回目のコールは、他のOCIThreadコールよりも先に行う必要があります。つまり、1回目のコールと同時に、他のOCIThread関数のコール(このコールも含みます)を行うことはできません。
この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
OCIエラー・ハンドルです。エラーが発生してOCI_ERROR
が戻された場合、そのエラーはerr
に記録され、OCIErrorGet()のコールによって診断情報を取得できます。
コメント
この関数は、OCIThreadInit()への各コールに対して1回のみコールする必要があります。
同時にOCIThreadTerm()
コールを行ってください。OCIThreadTerm()
のコール回数がOCIThreadInit()のコール回数と異なる場合、処理は行われません。コール回数が同じ場合、OCIThreadTerm()
はOCIThread層を終了し、コンテキストに割り当てられていたメモリーを解放します。この操作の後に、そのコンテキストを再使用しないでください。OCIThreadInit()をコールして新しいコンテキストを取得する必要があります。