[33] スレッド(タスク)間の問題 投稿者:えのも 投稿日:1999/12/15(Wed) 23:54:29

こんにちわ
 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.あるタスクから他のタスクを途中で強制的に止める方法はありますか?

どうか知恵をお貸し下さい。よろしく御願いします。


[33へのレス] Re: スレッド(タスク)間の問題 投稿者:>mac 投稿日:1999/12/20(Mon) 14:39:44

なんか難しく考えすぎのような気がします。

.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の方が軽快ですよ。

http://www.line.to/mac/MindStorms/


[33へのレス] 解決しました。 投稿者:えのも 投稿日:1999/12/21(Tue) 04:09:05

 macさん、レスありがとうございます。
結局、あまり美しくありませんが、IF分を大量に使って擬似的にマルチスレッドにして解決しました。


[33へのレス] Re: スレッド(タスク)間の問題 投稿者:JinSato 投稿日:1999/12/22(Wed) 01:49:26

●えのもさんへ
>結局、あまり美しくありませんが、IF分を大量に使って擬似的に
>マルチスレッドにして解決しました。
ん〜、どう解決したか、ぜひ、その過程をどこかに公開してくれると
嬉しいです。

http://www.mi-ra-i.com/JinSato/