|
||
解説: 今回は、CPU に負担のかかる文字入力をスレッドなしで行ってみます。レスポンスが非常に悪くなるのが分かります。処理のまずい例として、参考にしてください。 使用例: 以下の例では、Label に 1秒ごとのカウントを表示しながら、Memo への文字入力や編集を行っています。スレッドを使用していないので、カウント表示中、文字入力が困難なのが確認できます。 コンポーネントは、 Button 2 つと Lebel, Memo を適当に配置するだけです。 最初に、カウント数を保持する変数 count とカウントの動作を判定する変数 stop を宣言しておきます。 カウントの途中、フォームが閉じられた場合を考えて、OnCloseQuery イベントにカウント停止コードを記述しておきます。 Button1 の OnClick で、カウントを開始し、 Button2 の OnClick で、カウントを停止させています。 int count; bool stop; //------------------------------------------------------------------- void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { stop = true; } //------------------------------------------------------------------- //通常処理(カウント中、Memo入力はストレスがある) void __fastcall TForm1::Button1Click(TObject *Sender) { count = 0; stop = false; //カウント開始 while(stop == false) { Sleep(1000); Label1->Caption = IntToStr(++count); Application->ProcessMessages(); } } //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //停止 stop = true; } //------------------------------------------------------------------- |