ループを遅らせることなく、ケース構造に遅延を設定するにはどうすればよいですか?
Aug 25 2020
申し訳ありませんが、プログラム全体(会社の規則)を投稿することは許可されていません。
スクリプトファイルを読み取り、そのファイルにタイマー値を読み込むプログラムの一部があります。スクリプトファイルからの次の行の読み込みを一時停止するには、その値が必要です。これを行うことを認識している唯一の方法は、次のとおりです。
ここで、文字列からのスキャン関数はミリ秒単位で時間を取得し、それを遅延関数に挿入します。これに伴う問題は、メインループが遅延し、同じスクリプトファイルから発行された以前のコマンドに基づいて他の時間指定関数が同時に実行されているため、実行に時間がかかる可能性があることです。ケース構造内でこれをインスタンス化して、次のコマンドの読み取りを一時停止し、メインループを続行する方法はありますか?
私のスクリプトリーダーにはイベントハンドラーがあるので、プログラムの残りの部分は呼び出されるまでそれなしで実行されます。
これは、データをタイマーに直接フィードするネストされたcaseステートメントに直接フィードします。どんな助けでも大歓迎です!
回答
1 sweber Aug 27 2020 at 01:46
私が正しく理解している場合:
- 中断することなく常にいくつかのタスクを実行するループがあります
- ボタンが押されると、ループの2回の反復の間に特別なタスクが実行されることがあります。
- 特別なタスクは、ボタンを数秒間無効にすることです
これは、次の簡略化されたコードによって実現されます。
- ボタンがクリックされ、ファイルからのコマンドがである
WAIT 30場合、現在の時刻に30を加えたものがシフトレジスタに書き込まれ、ボタンはグレー表示で無効になります。つまり、ユーザーはそれをクリックできず、これも表示されます。 - 100ms以内にボタンがクリックされない
Timeout場合、ケースが実行されます。(何度も何度も...)そこでは、常に実行する必要のあるすべてのタスクが実行されます。その場合は、現在の時刻がシフトレジスタの時刻よりも大きいかどうかも確認し、ボタンを再度有効にします。