WideStudio Logo
WideStudio
Programming Guide
WideStudio Index
目次


スレッド



スレッドクラスを用いた長時間処理の実行

WSCvthread クラスを利用すると長時間かかる処理を実行することが できます。

長時間かかる処理を実行するには、メインスレッドとは別に動作する スレッドを、THREAD-STARTED トリガで起動するイベントプロシージャとして 記述します。

#include <WScom.h>
#include <WSCfunctionList.h>
#include <WSCbase.h>
//----------------------------------------------------------
//Function for the event procedure
//----------------------------------------------------------
//サブスレッドとして実行するイベントプロシージャ
void thread_ep(WSCbase* object){
  //長時間の処理
  //....
}

スレッドを実行するには、スレッドインスタンスに対して executeThread() メンバ関数を呼び出します。

  //THREAD-STARTED トリガで設定したイベントプロシージャを
  //サブスレッドとして実行
  newvthr_000->executeThread();

executeThread() メンバ関数によって起動された THREAD-START トリガで 設定したイベントプロシージャ内では、 メインスレッドとは非同期のサブスレッドとして動作するため、 スレッドアンセーフであるWideStudio の GUI インスタンスに対して 排他制御無しに操作してはいけません。 WideStudio の GUI インスタンスに対して スレッド内で処理を行なった結果を表示させたい場合等は、 スレッドインスタンスに対して sendActivateEvent() メンバ関数を 用いて、 メインスレッドに通知する手段を用います。 sendActivateEvent() メンバ関数を呼び出すと、 メインスレッドにおいて、ACTIVATE イベントが発生し、 そのイベントプロシージャ内で安全に、 WideStudio の GUI インスタンスに対して操作することができます。
下記は ACTIVATE トリガでスレッドインスタンス

#include <WScom.h>
#include <WSCfunctionList.h>
#include <WSCbase.h>
//----------------------------------------------------------
//Function for the event procedure
//----------------------------------------------------------

void thread_ep(WSCbase* object){
  //長時間の処理
  //....

  //メインスレッドにACTIVATEイベントを通知
  object->sendActivateEvent();
}

メインスレッドで実行するための ACTIVATEトリガによるイベントプロシージャを 設定し、下記の例のようにサブスレッドと同期して、 WideStudio の GUI インスタンスを持ち用いた表示処理等を 行なうことができます。

#include <WScom.h>
#include <WSCfunctionList.h>
#include <WSCbase.h>
//----------------------------------------------------------
//Function for the event procedure
//----------------------------------------------------------
//メインスレッドで動作する
void activate_ep(WSCbase* object){
  //メインスレッドにACTIVATEイベントを通知
  newvlab_000->setProperty(WSNlabelString,"サブスレッドの処理が完了!");
}


Document Release 3.70 for WideStudio ver 3.70, May 2004


WideStudio documents index | 目次

Copyright(C) WideStudio Development Team, 1999-2004 Last modified: May 25, 2004