spBase
読み取り中…
検索中…
一致する文字列を見つけられません
マルチスレッド

マクロ定義

#define SP_THREAD_PRIORITY_TIME_CRITICAL   15
 
#define SP_THREAD_PRIORITY_HIGHEST   2
 
#define SP_THREAD_PRIORITY_ABOVE_NORMAL   1
 
#define SP_THREAD_PRIORITY_NORMAL   0
 
#define SP_THREAD_PRIORITY_BELOW_NORMAL   (-1)
 
#define SP_THREAD_PRIORITY_LOWEST   (-2)
 
#define SP_THREAD_PRIORITY_IDLE   (-15)
 
#define SP_EVENT_TIMEOUT_INFINITE   -1
 
#define SP_EVENT_WAIT_FAILED   -1
 
#define SP_EVENT_WAIT_SIGNALED   0
 
#define SP_EVENT_WAIT_TIMEOUT   1
 
#define SP_EVENT_WAIT_ABANDONED   2
 

型定義

typedef void(* spCommandThreadCallback) (spCommandThreadStatus status, long data, void *user_data)
 

列挙型

enum  spCommandThreadStatus {
  SP_COMMAND_THREAD_STARTED = 0 , SP_COMMAND_THREAD_FINISHED = 1 , SP_COMMAND_THREAD_COMMAND_FINISHED = 2 , SP_COMMAND_THREAD_COMMAND_FAILED = 3 ,
  SP_COMMAND_THREAD_COMMAND_WAIT_FAILED = 4
}
 

関数

void * spCreateThread (long stacksize, int priority, spThreadFunc func, void *data)
 
void spDestroyThread (void *handle)
 
void spExitThread (long status)
 
void spYieldThread (void)
 
long spWaitThread (void *handle)
 
spThreadId spGetThreadId (void *handle)
 
spThreadId spGetCurrentThreadId (void)
 
spBool spEqThreadId (spThreadId id1, spThreadId id2)
 
void * spCreateMutex (const char *name)
 
void spDestroyMutex (void *handle)
 
spBool spLockMutex (void *handle)
 
spBool spUnlockMutex (void *handle)
 
spBool spWaitMutex (void *handle)
 
void * spCreateEvent (spBool manual_reset, spBool initial_signal)
 
spBool spDestroyEvent (void *handle)
 
int spWaitEventTimeout (void *handle, long timeout_ms)
 
spBool spWaitEvent (void *handle)
 
spBool spSetEvent (void *handle)
 
spBool spResetEvent (void *handle)
 
spBool spPulseEvent (void *handle)
 
spBool spCreateCommandThread (const char *command, spCommandThreadCallback func, void *data)
 

詳解

マクロ定義詳解

◆ SP_THREAD_PRIORITY_TIME_CRITICAL

#define SP_THREAD_PRIORITY_TIME_CRITICAL   15

Thread priority for really time critical processing (higher than the highest thread priority).

◆ SP_THREAD_PRIORITY_HIGHEST

#define SP_THREAD_PRIORITY_HIGHEST   2

Highest thread priority.

◆ SP_THREAD_PRIORITY_ABOVE_NORMAL

#define SP_THREAD_PRIORITY_ABOVE_NORMAL   1

Thread priority above normal.

◆ SP_THREAD_PRIORITY_NORMAL

#define SP_THREAD_PRIORITY_NORMAL   0

Normal thread priority.

◆ SP_THREAD_PRIORITY_BELOW_NORMAL

#define SP_THREAD_PRIORITY_BELOW_NORMAL   (-1)

Thread priority below normal.

◆ SP_THREAD_PRIORITY_LOWEST

#define SP_THREAD_PRIORITY_LOWEST   (-2)

Lowest thread priority.

◆ SP_THREAD_PRIORITY_IDLE

#define SP_THREAD_PRIORITY_IDLE   (-15)

Thread priority for idle state (lower than the lowest thread priority).

◆ SP_EVENT_TIMEOUT_INFINITE

#define SP_EVENT_TIMEOUT_INFINITE   -1

Infinite timeout for spWaitEventTimeout() .

◆ SP_EVENT_WAIT_FAILED

#define SP_EVENT_WAIT_FAILED   -1

Waiting for the event object failed.

◆ SP_EVENT_WAIT_SIGNALED

#define SP_EVENT_WAIT_SIGNALED   0

The event object signaled.

◆ SP_EVENT_WAIT_TIMEOUT

#define SP_EVENT_WAIT_TIMEOUT   1

Timeout period elapsed.

◆ SP_EVENT_WAIT_ABANDONED

#define SP_EVENT_WAIT_ABANDONED   2

Waiting for the event object is abandoned.

型定義詳解

◆ spCommandThreadCallback

typedef void(* spCommandThreadCallback) (spCommandThreadStatus status, long data, void *user_data)

Signature of the callback function for spCreateCommandThread() .

列挙型詳解

◆ spCommandThreadStatus

Status of the command thread. This status can be accessed as the 1st argument of spCommandThreadCallback .

列挙値
SP_COMMAND_THREAD_STARTED 

Status when the command thread started. data: 0

SP_COMMAND_THREAD_FINISHED 

Status when the command thread finished. data: 0

SP_COMMAND_THREAD_COMMAND_FINISHED 

Status when the specified command finished. data: command exit code

SP_COMMAND_THREAD_COMMAND_FAILED 

Status when the specified command failed. data: errno

SP_COMMAND_THREAD_COMMAND_WAIT_FAILED 

Status when waiting for the specified command failed. data: errno

関数詳解

◆ spCreateThread()

void * spCreateThread ( long stacksize,
int priority,
spThreadFunc func,
void * data )
extern

新たなスレッドを作成します.この関数により作成されたスレッドが使用されなくなったら, spDestroyThread() を呼んで下さい.

引数
[in]stacksize作成されるスレッドが持つスタックのサイズをバイト数で指定します. 0を指定したときはデフォルトのスタックサイズとなります.この値は環境によって異なります.
[in]priorityスレッドの優先順位を指定します.優先順位が高い方から, SP_THREAD_PRIORITY_TIME_CRITICAL , SP_THREAD_PRIORITY_HIGHEST , SP_THREAD_PRIORITY_ABOVE_NORMAL , SP_THREAD_PRIORITY_NORMAL (=0), SP_THREAD_PRIORITY_BELOW_NORMAL , SP_THREAD_PRIORITY_LOWEST, SP_THREAD_PRIORITY_IDLE が指定できます.環境によってはこの値は無視されます.
[in]funcスレッド関数のアドレスを指定します. スレッド関数は, spThreadReturn func(void *data); の形式で定義する必要があります. また,スレッド関数の終了コードとして, SP_THREAD_RETURN_SUCCESS (正常終了)と SP_THREAD_RETURN_FAILURE (異常終了)が用意されています. スレッド関数の終了コードは spWaitThread() の戻り値として得られます.
[in]data新しいスレッドに渡す引数を指定します.スレッド関数で引数を使用しない場合はNULLでも構いません.
戻り値
スレッドハンドルが返ります.スレッドの作成に失敗した場合はNULLが返ります.
参照
spDestroyThread()
各種例
simple_thread.c, thread_test.c.

◆ spDestroyThread()

void spDestroyThread ( void * handle)
extern

スレッドハンドルを閉じます. spCreateThread() で作成したスレッドを使用しなくなったときに呼んで下さい.

引数
[in]handlespCreateThread() により得られたスレッドハンドルを指定します.
参照
spCreateThread()

◆ spExitThread()

void spExitThread ( long status)
extern

現在のスレッドを終了させます. spCreateThread() により作成されたスレッド以外の関数でこの関数を呼んだ場合の動作は不定です.

引数
[in]status終了コードを指定します. この終了コードは spWaitThread() の戻り値として得られます.
参照
spCreateThread() , spWaitThread()

◆ spYieldThread()

void spYieldThread ( void )
extern

現在のスレッドの実行権を別のスレッドに渡します.MacOS 9のようにスレッドの実行権が一つだけの環境で有効です. このような環境で長い計算を行う場合には,特定のスレッドが実行権を持ち続けてしまい,他のスレッドは処理が全く行われないことになります. そのため,必要に応じてこの関数を途中で呼び出して下さい.

参照
spCreateThread()
各種例
thread_test.c.

◆ spWaitThread()

long spWaitThread ( void * handle)
extern

スレッドの終了を待ちます.

引数
[in]handlespCreateThread() により得られたスレッドハンドルを指定します.
戻り値
スレッド関数の終了コードが返ります.スレッドが終了するまでこの関数から戻りません.
参照
spCreateThread()
各種例
simple_thread.c, thread_test.c.

◆ spGetThreadId()

spThreadId spGetThreadId ( void * handle)
extern

スレッドハンドルからスレッドIDを取得します.

引数
[in]handlespCreateThread() により得られたスレッドハンドルを指定します.
戻り値
スレッドのIDが返ります.
参照
spCreateThread()

◆ spGetCurrentThreadId()

spThreadId spGetCurrentThreadId ( void )
extern

現在のスレッドのスレッドIDを取得します.

戻り値
スレッドのIDが返ります.

◆ spEqThreadId()

spBool spEqThreadId ( spThreadId id1,
spThreadId id2 )
extern

スレッドIDからスレッドが同じものであるかどうかをチェックします.

引数
[in]id1,id2チェック対象のスレッドのIDを指定します.
戻り値
SP_TRUE同じ
SP_FALSE同じでない
参照
spGetThreadId() , spGetCurrentThreadId()

◆ spCreateMutex()

void * spCreateMutex ( const char * name)
extern

ミューテックスオブジェクトを作成します.この関数を呼んだだけでは所有権は獲得されません.所有権を得るには, spLockMutex() を呼びます. なお,環境によっては,名前が無視され,名前なしのオブジェクトが作られます.

引数
[in]nameミューテックスオブジェクトの名前(ヌル終端文字列)を指定します.
戻り値
オブジェクトのハンドルが返ります.オブジェクトの作成に失敗した場合はNULLが返ります.
参照
spDestroyMutex()
各種例
thread_test.c.

◆ spDestroyMutex()

void spDestroyMutex ( void * handle)
extern

ミューテックスオブジェクトを破棄します. spCreateMutex() で作成したオブジェクトを使用しなくなったときに呼んで下さい.

引数
[in]handlespCreateMutex() により得られたオブジェクトハンドルを指定します.
参照
spCreateMutex()

◆ spLockMutex()

spBool spLockMutex ( void * handle)
extern

ミューテックスオブジェクトの所有権を獲得します.環境によっては,クリティカルセクションと同様の動作となります.

引数
[in]handlespCreateMutex() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateMutex() , spUnlockMutex()
各種例
thread_test.c.

◆ spUnlockMutex()

spBool spUnlockMutex ( void * handle)
extern

ミューテックスオブジェクトの所有権を解放します.環境によっては,クリティカルセクションと同様の動作となります.

引数
[in]handlespCreateMutex() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateMutex() , spLockMutex()
各種例
thread_test.c.

◆ spWaitMutex()

spBool spWaitMutex ( void * handle)
extern

ミューテックスオブジェクトの所有権が解放されるのを待ちます.環境によっては,クリティカルセクションと同様の動作となります.

引数
[in]handlespCreateMutex() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateMutex()

◆ spCreateEvent()

void * spCreateEvent ( spBool manual_reset,
spBool initial_signal )
extern

イベントオブジェクトを作成します.

引数
[in]manual_resetSP_TRUEにすると,手動でリセットが必要なモードになります.
[in]initial_signalSP_TRUEにすると,関数呼び出しと同時にシグナル状態にします.
戻り値
オブジェクトのハンドルが返ります.オブジェクトの作成に失敗した場合はNULLが返ります.
参照
spDestroyEvent()

◆ spDestroyEvent()

spBool spDestroyEvent ( void * handle)
extern

イベントオブジェクトを破棄します. spCreateEvent() で作成したオブジェクトを使用しなくなったときに呼んで下さい.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateEvent()

◆ spWaitEventTimeout()

int spWaitEventTimeout ( void * handle,
long timeout_ms )
extern

イベントオブジェクトがシグナル状態になるのを待機します.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
[in]timeout_msタイムアウトをミリ秒で指定します. SP_EVENT_TIMEOUT_INFINITE を指定すると,シグナル状態になるまで待機し続けます.
戻り値
タイムアウト前にシグナル状態になった場合には SP_EVENT_WAIT_SIGNALED が,タイムアウトになった場合には SP_EVENT_WAIT_TIMEOUT が,その他に理由で待機を中止した場合には SP_EVENT_WAIT_ABANDONED が返ります. 待機に失敗した場合は SP_EVENT_WAIT_FAILED が返ります.
参照
spCreateEvent()

◆ spWaitEvent()

spBool spWaitEvent ( void * handle)
extern

イベントオブジェクトがシグナル状態になるのを待機します.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateEvent()

◆ spSetEvent()

spBool spSetEvent ( void * handle)
extern

イベントオブジェクトをシグナル状態にします.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateEvent() , spResetEvent()

◆ spResetEvent()

spBool spResetEvent ( void * handle)
extern

イベントオブジェクトを非シグナル状態にします.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateEvent() , spSetEvent()

◆ spPulseEvent()

spBool spPulseEvent ( void * handle)
extern

イベントオブジェクトをシグナル状態にした後,すぐに非シグナル状態にします.

引数
[in]handlespCreateEvent() により得られたオブジェクトハンドルを指定します.
戻り値
SP_TRUE成功
SP_FALSE失敗
参照
spCreateEvent() , spResetEvent() , spResetEvent()

◆ spCreateCommandThread()

spBool spCreateCommandThread ( const char * command,
spCommandThreadCallback func,
void * data )
extern

スレッドでコマンドを実行します.

引数
[in]command実行したいコマンドをヌル終端文字列で指定します.
[in]funcコールバック関数を指定します.以下の形( spCommandThreadCallback )である必要があります.
void func(spCommandThreadStatus status, long data, void *user_data);
spCommandThreadStatus
Definition spThread.h:109
[in]dataコールバックユーザーデータを指定します.コールバック関数が呼ばれる際に,第3引数にこの値が入ることになります.
戻り値
SP_TRUE成功
SP_FALSE失敗
各種例
command_thread.c.