ファイル検索ツールのソースコードを読んで勉強する(2)

前回の続きです。

ファイル検索ツールを作ってみた – C++Builder好きの秘密基地」で公開されているファイル検索ツールのソースコードを読んで勉強します。

検索処理では、TJvThreadが使用されています。

TJvThreadはJVCLのコンポーネントです。
残念ながらまとまった資料を見つけることができませんでした。

スレッドが始まるとOnBeginイベントが発生し、OnExecuteイベントでメインの処理を行い、処理が終わるとOnFinishイベントが発生するようです。

JVCLをダウンロードしたフォルダーにexamplesフォルダーがあり、JvThreadのサンプルコードを見つけることができました。
なぜかDelphi用のサンプルコードは簡素なものなのに、BCBフォルダーにあるC++Builder用のサンプルコードは手の込んだプログラムになっていました。

Delphi用サンプルプログラム

C++Builder用サンプルプログラム

サンプルプログラムを参考に、TJvThreadについて学びたいと思います。

検索中にESCキーを押すと、検索処理を中断する仕組み。

フォームのOnKeyPressイベントでキー入力を取得し、ESCキーが押されたかどうかを判定しています。

void __fastcall TfrmMain::FormKeyPress(TObject *Sender, wchar_t &Key)
{
  if (JvThread1->Count && Key == 0x1b) {
    QueryCancel();
  }
}

キャンセルされたときの処理。

処理をいったん中断して、確認ダイアログを表示します。
中断をキャンセルしたときは処理を再開します。

void __fastcall TfrmMain::QueryCancel()
{
  JvThread1->Suspend();
  int ret = MessageDlg("検索を中断しますか?", mtConfirmation, TMsgDlgButtons() << mbYes<<mbNo, 0);
  if (ret == mrYes) {
    JvThread1->TerminateWaitFor();
    JvThread1CancelExecute(JvThread1);
  } else {
    JvThread1->Resume(JvThread1->LastThread);
  }
}

ということで、検索処理で気になった部分を取り上げました。

次回に続きます。

コメント

  1. Pingback: ファイル検索ツールのソースコードを読んで勉強する(1) « 山本隆の開発日誌

  2. Pingback: ファイル検索ツールのソースコードを読んで勉強する(3) « 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください