 | | WideStudio/MWT Class Reference
| |
クラスの型
WSDthread
メソッド関数仕様
getNewInstance() 関数の説明
- 書式
- WSDthread* WSDthread::getNewInstance()
- 機能
- WSDthread インスタンスを取得します。
WSDthread インスタンスは、new 演算子で生成せず、
この getNewInstance() メンバ関数で生成します。
- 処理
-
- 引数
- なし。
- 返値
- WSDthread インスタンスへのポインタ
- 注意
- この関数はスタティック関数です。
- サンプル
- createThread() を参照してください。
createThread 関数の説明
- 書式
- long createThread(void* data)
- 機能
- スレッドを生成します。
あらかじめ setFunction() メンバ関数により、
生成したスレッド上で実行する関数を指定しておきます。
- 処理
-
- 引数
-
(in)void* data | 生成スレッドに引き渡されるパラメータ |
- 返値
- WS_NO_ERR= 正常、それ以外はエラー。
- 注意
- WSthreadProc は次の様に定義されています。
typedef void* (*WSthreadProc)(WSDthread*,void*);
下記の例では、例えば、イベントプロシージャ
sample_event_procedure() が
WSCvbtn の様なもので起動された場合、
thread_proc() がサブスレッドとして起動されます。
一度スレッドを生成し、
detachThread () を呼びださない場合、
joinThread()メソッドが呼び出され、
スレッドを修了待ちするまでの間、
新たな createThread() は実行できません。
- サンプル
-
void* thread_proc(WSDthread* thr,void* data){
//スレッドで処理...
return NULL;
}
void sample_event_procedure(WSCbase* object){
//スレッドインスタンスを生成
WSDthread* thr = WSDthread::getNewInstance();
//スレッドとして起動する関数を設定。
thr->setFunction(thread_proc);
//スレッドを生成
thr->createThread(NULL);
}
joinThread 関数の説明
- 書式
- long joinThread(void** ptr);
- 機能
- 生成したスレッドの終了を待ちます。
- 処理
-
- 引数
-
(out)void** ptr | スレッドの終了ステータスを格納するポインタ |
- 返値
- WS_NO_ERR= 正常、それ以外はエラー。
- 注意
- スレッドの実行が終了している場合、エラーがかえされます。
- サンプル
-
void* thread_proc(WSDthread* thr,void* data){
//スレッドで処理...
return NULL;
}
void sample_event_procedure(WSCbase* object){
//スレッドインスタンスを生成
WSDthread* thr = WSDthread::getNewInstance();
//スレッドとして起動する関数を設定。
thr->setFunction(thread_proc);
//スレッドを生成
thr->createThread(NULL);
//スレッドの終了を待つ
void* return_value;
thr->joinThread(&return_value);
}
terminateThread 関数の説明
- 書式
- long terminateThread()
- 機能
- 実行中のスレッドを強制的に停止します。
- 処理
-
- 引数
- なし。
- 返値
- WS_NO_ERR= 正常、それ以外はエラー。
- 注意
-
- サンプル
-
void* thread_proc(WSDthread* thr,void* data){
//スレッドで処理...
return NULL;
}
void sample_event_procedure(WSCbase* object){
//スレッドインスタンスを生成
WSDthread* thr = WSDthread::getNewInstance();
//スレッドとして起動する関数を設定。
thr->setFunction(thread_proc);
//スレッドを生成
thr->createThread(NULL);
//実行状態を取得
long status = thr->getStatus();
if (status == WS_THREAD_RUNNING){
//スレッドを強制的に終了。
thr->terminateThread();
}
}
getStatus 関数の説明
- 書式
- long getStatus()
- 機能
- スレッドの実行状態を取得します。
- 処理
-
- 引数
- なし。
- 返値
- WS_THREAD_STOPPED = スレッド非実行中、WS_THREAD_RUNNING =スレッド実行中。
- 注意
-
- サンプル
- terminateThread() を参照してください。
setFunction 関数の説明
- 書式
- void setFunction(WSthreadProc func)
- 機能
- スレッドの生成時に起動する関数を指定します。
- 処理
-
- 引数
-
(in)WSthreadProc data | スレッド生成時に起動する関数 |
- 返値
- なし。
- 注意
- WSthreadProc は次の様に定義されています。
typedef void* (*WSthreadProc)(WSDthread*,void*);
下記の例では、例えば、イベントプロシージャ
sample_event_procedure() が
WSCvbtn の様なもので起動された場合、
thread_proc() がサブスレッドとして起動されます。
- サンプル
- createThread を参照してください。
setCallbackFunction 関数の説明
- 書式
- void setCallbackFunction(WSthreadCallbackProc func)
- 機能
- サブスレッドからメインスレッド上でコールバック関数を起動する
際のコールバック関数を指定します。
- 処理
-
- 引数
-
(in)WSthreadCallbackProc data | 起動する関数 |
- 返値
- なし。
- 注意
- WSthreadCallbackProc は次の様に定義されています。
typedef void (*WSthreadCallbackProc)(WSDthread*,void*);
下記の例では、例えば、サブスレッドイベントプロシージャ
thread_proc からメインスレッド上で動作するコールバック関数
callback_proc を起動する例です。
- サンプル
-
void* thread_proc(WSDthread* thr,void* data){
//スレッドで処理...
thr->execCallback(NULL);
return NULL;
}
void callback_proc(WSDthread* thr,void* data){
//メインスレッドで処理...
return;
}
void sample_event_procedure(WSCbase* object){
//スレッドインスタンスを生成
WSDthread* thr = WSDthread::getNewInstance();
//スレッドとして起動する関数を設定。
thr->setFunction(thread_proc);
//メインスレッドで動作するしコールバック関数を設定。
thr->setCallbackFunction(callback_proc);
//スレッドを生成
thr->createThread(NULL);
}
execCallback 関数の説明
- 書式
- long execCallback(void* data)
- 機能
- サブスレッドからメインスレッド上で動作する
コールバック関数を起動します。
- 処理
-
- 引数
-
(in)void* data | 起動する関数に引き渡すポインタ |
- 返値
- なし。
- 注意
- WSthreadCallbackProc は次の様に定義されています。
typedef void (*WSthreadCallbackProc)(WSDthread*,void*);
- サンプル
- setCallbackFunction() を参照してください。
Document Release 3.90 For Use with WideStudio/MWT Release 3.90, Summer 2005 WideStudio/MWT Home | Up to Copyright(C) WideStudio/MWT Development Team, 1999-2005 | | Last modified: June 25, 2005 | |