XojoのThreadクラスを知っていますか?
Threadクラスと聞いても、何の事かも判らないし、得体の知れない物と思われているかも判りませんが、
簡単な例を上げてみると:
通常のプログラムは
1)ユーザから何かの入力を受けて、加工を施してから画面に表示します。
また
2)ファイルやネットワークからデータを読み込んで、加工して画面に表示したり、
別のファイルに書き出したりします。
この様な場合に、加工すべきデータが数十〜数百の程度だと現状のパソコンでも、
処理内容にも拠りますがほぼ数秒以内に結果が得られます。
しかし
加工すべき元データが数万〜数千万の単位になると、数分もしくは数時間掛かるかも知れません。
その作業時間にユーザからのアクションである各種イベントが処理されなくなると、どうなるでしょうか?
・プログラムが暴走orハングアップしたのか?
・何か間違った捜査をしてしまったのでは無いか?
・指定すべきデータを間違ったのでやり直したい!
等と言う状況になるかも…
そのような場合に役立つのが、Threadクラスや別途説明するWorkerクラスです。
(今回はThreadクラスの説明ですので、Workerクラスは別の機会にします)
加工処理に時間がかかる場合、ユーザに状況を把握してもらうため
・ダイアログウィンドウ等を表示して、全データ件数の内の何件目を処理しているのかを表示する。
・ユーザからの途中での停止、中断等のアクションを受けて、適切な対応をする。
みたいな動作をする事が望ましいと考えられます。
そこで、アプリケーションの本来の流れはダイアログウィンドウを表示し、データ加工の進行状況を
更新しつつ、イベントを適切に処理しておく事で、ユーザはいつでもアプリケーションを安心して
使用できます。
本来の流れとは別に(Threadクラスを用いて)データ加工を順次行う事で、プログラムの流れを分離して
簡潔な構成にして、作成が容易になり、バグの発生も軽減できる事が期待できます。
但し、Threadの処理内ではThread SafeなAPIしか呼び出す事が出来ません。
具体的には画面への表示更新などはThread Safeでは無いので、呼び出す事は出来ません。
ご注意ください。