C++Builder XEでTThread.CreateAnonymousThreadを使ってみる。

前回の記事(DelphiのTThread.CreateAnonymousThreadと無名メソッドを使うと、簡単なスレッド処理なら手軽にかける)のDelphiのコードと同じ処理を、C++Builder XEで記述してみます。

元のDelphiのコード。

procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := 'Start';
  TThread.CreateAnonymousThread(
    procedure()
    begin
      Sleep(10000); //時間のかかる処理
      //Synchronizeメソッドを使う
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          Caption := 'OK';
        end);
    end).Start;
end;

C++Builder XEのコード。

//スレッドで行う処理
class TSleepFunc : public TCppInterfacedObject<TProc>
{
public:
  TSleepFunc(TForm* Form) : FForm(Form) {}
  virtual void __fastcall Invoke(void) {
    Sleep(10000); //時間のかかる処理
    //Synchronizeメソッドを使う
    TThread::Synchronize(TThread::CurrentThread, UpdateCaption);
  }
  void __fastcall UpdateCaption(void) {
    FForm->Caption = "OK";
  }
private:
  TForm* FForm;
};
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Caption = "Start";
  TThread::CreateAnonymousThread(new TSleepFunc(this))->Start();
}

無名メソッドの使えないC++Builder XEでは、TThread.CreateAnonymousThreadのメリットをあまり得られないように思いました。

コメントを残す

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

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