こんにちわ
VBでプログラミングしているのですが2つのスレッドを同時に動作させる時に起こる問題で悩んでいます。
以下のプログラムは暗い状態で2種類の音を繰り返し出しつづけ、光が入れば即座に音を止めモータを回すと言うものです。Task1では光が入ってきた時の動作を、Task2では2種類の音を鳴らそうと思い書きました。
しかしこのソースでは@で毎回StartTask (2)を実行してしまうので一種類の音しか鳴りません。更にTask2のAの所で光が入ってきてもすぐには止まらずTaskの最後Bまで実行してしまいます。
.BeginOfTask (1)
.Loop CON, 0
.While SENVAL, 1, 0, CON, 55
.StopTask (2)
.On 0
.EndWhile
.StartTask (2) −−−−−−−−@
.Off 0
.EndLoop
.EndOfTask
.BeginOfTask (2)
.Loop CON, 0
.PlayTone 3000, 30 −−繰り返す音
.Wait CON, 20 −−−−−−A
.PlayTone 3300, 30
.Wait CON, 20
.Off 2 −−−−−−B
.EndLoop
.EndOfTask
質問
1.タスクのどの行まで実行したか確認する方法(例:ラベル付け等)はspirit.ocxにあるでしょうか?もし有れば次の行から実行を再開でき同じ音を何度も鳴らす状態を解消できます。
2.もしくは他のタスクが実行中かどうかを判定する方法はありますか?
3.あるタスクから他のタスクを途中で強制的に止める方法はありますか?
どうか知恵をお貸し下さい。よろしく御願いします。
なんか難しく考えすぎのような気がします。
.BeginOfTask (1)
.Loop CON, 0
.Off 0
.StartTask (2)
.While SENVAL, 1, 1, CON, 53
.EndWhile
.StopTask (2)
.On 0
.While SENVAL, 1, 0, CON, 57
.EndWhile
.EndLoop
.EndOfTask
.BeginOfTask (2)
.Loop CON, 0
.PlayTone 3000, 30
.Wait CON, 20
.PlayTone 3300, 30
.Wait CON, 20
.EndLoop
.EndOfTask
PCとのデーター送受がなければNQCの方が軽快ですよ。
macさん、レスありがとうございます。
結局、あまり美しくありませんが、IF分を大量に使って擬似的にマルチスレッドにして解決しました。
●えのもさんへ
>結局、あまり美しくありませんが、IF分を大量に使って擬似的に
>マルチスレッドにして解決しました。
ん〜、どう解決したか、ぜひ、その過程をどこかに公開してくれると
嬉しいです。