ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

Memo にスレッドなしで文字入力する 

更新 : 2009/04/04

 



解説:
今回は、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;
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.