動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
やりたいこと
複数台のRS-232C通信処理を実装する。
通信処理はメインのユニットとは分離して、再利用性を高める。
分離する処理の実装は「TThreadにする」か「別ユニットのフォームにする」かなどが考えられる。別ユニットのフォームとして実装してみる。その前段階として1つのフォームを作り、そのフォームを複数個インスタンス生成してみる。
手順
構成としては以下とする。
- Main.cpp : メインフォーム
- UnitComm.cpp : 通信処理のフォーム (Name: FormComm)
- UnitCommを新規作成する
- プロジェクト > オプション > フォーム にて「自動生成フォーム」の欄からFormCommを「使用可能フォーム」に移動して自動生成を防止する
- Main.hにてUnitComm.hをincludeする
- Main.hにてTFormComm *m_commForms[10];のように宣言する
- Main.cppの処理で以下のようにインスタンス生成する
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int idx=0; idx<4; idx++) {
m_commForms[idx] = new TFormComm(this);
m_commForms[idx]->Show();
}
}
上記にて4つのフォームが生成される。
TFormComm()のコンストラクタにてidxを引数として渡すなどして、それぞれ異なる処理を実装できる。
newで生成するのでMain終了時は適宜delete処理が必要。
TThreadでなくFormで処理する利点としては、FormにはTMemoなどを含めることができる。通信内容のデバッグなどがしやすくなる。TThreadでない短点としては、プライオリティの調整ができないこと。