掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
実行中の関数を中止させて新たに実行する方法 (ID:42020)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして。 意味不明な質問タイトルで申し訳ありません。 2つのTEditがあり、それぞれのOnEnterイベントより同じ関数(Test)を実行しようとしています。 この関数(Test)は多少時間のかかるループ処理で、 既に実行中だった場合は中止してから再実行したいのですが どのように制御してよいのかわかりません。 中止するためのフラグを持たせOnEnterイベント内でセットして 関数(Test)のループを抜けさせようというイメージで作成したのですが どう考えてもこれでは動きません・・・ 何かよい方法がないでしょうか? ////////////////////////////////////////////////// procedure TForm1.Test(Msg: string); var iCount: Integer; After1Sec: Cardinal; begin Memo1.Lines.Add(Msg + ':ST'); FAbort := False; FFind := True; for iCount:=0 to 10 do begin Application.ProcessMessages; if FAbort then Break; // 中止する // 多少時間のかかる処理の代わり After1Sec := GetTickCount + 500; while GetTickCount < After1Sec do // end; FFind := False; Memo1.Lines.Add(Msg + ':END'); end; procedure TForm1.Edit1Enter(Sender: TObject); begin if FFind then FAbort := True; Test('Edit1Enter'); end; procedure TForm1.Edit2Enter(Sender: TObject); begin if FFind then FAbort := True; Test('Edit2Enter'); end; ////////////////////////////////////////////////// このソースで実行してEdit1とEdit2を順にクリックすると、 デバッグ用メッセージは次のように表示されます。 Edit1Enter:ST Edit2Enter:ST Edit2Enter:END Edit1Enter:END 実際は、このようになるよう制御したいのです。 Edit1Enter:ST Edit1Enter:END Edit2Enter:ST Edit2Enter:END よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.