WideStudio Programming Guide

| 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, Feb 2004

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004