[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/09(Wed) 10:03
投稿者名:やまめ
Eメール:
URL :
タイトル:
タイマーイベントによるタスクの切り替え
初歩的はご質問で恐縮ですが、どなたかご教授ください。

複数のタイマイベントによるタスクの切り替えの優先順位などが良くわかりません。

例えば、Aタイマイベントによる処理実行中に、Bタイマイベントプロシージャはもちろん実行される
のでしょ
うか?
また、Aタイマイベントの最初に、Enabled=false、最後にEnabled=trueとしておかないと、
Aタイマイベントプロシージャ自身が多重に呼び出されるのでしょうか?

現在、ふたつ(仮にA,Bとする)のタイマプロシージャ内で、外部入力をチェックし、
それぞれ必要に応じて、シリアル通信で外部機器にコマンドを送信しています。
(応答の受信もポーリングで行う。送受信には、A,Bから同じサブルーチン呼び出しで実現)

・Aで送信中あるいは応答コマンド受信待ちの状態で、Bは実行されるか?
・さらに、Bでも送信の必要が出た場合、外部機器の競合が発生し、正しく通信できなくなるか?

分かりにくい文章で恐縮ですが、よろしくお願い致します。

投稿時間:2005/02/09(Wed) 12:04
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: タイマーイベントによるタスクの切り替え
試せば解る話ではないでしょうか? 何よりも貴方の環境で試す事大事ですから。
その上で何か問題があれば質問されたらいかがですか?

自分ができる事、やれる事は、自分でやってから質問するように
して下さい。
(そうすれば少なくても質問の内容が変ってくるかと思います。)

Option Explicit

Private Sub Timer1_Timer()
    Label1.Caption = Val(Label1.Caption) + 1
    Label1.Refresh
End Sub

Private Sub Command1_Click()
    Timer1.Enabled = Not Timer1.Enabled
End Sub

Private Sub Command2_Click()
    Timer2.Enabled = Not Timer2.Enabled
End Sub

Private Sub Form_Load()
    Timer1.Interval = 1000
    Timer2.Interval = 1000
End Sub

Private Sub Timer2_Timer()
    Label2.Caption = Val(Label2.Caption) + 1
    Label2.Refresh
End Sub

投稿時間:2005/02/09(Wed) 13:28
投稿者名:るしぇ
Eメール:
URL :
タイトル:
ヘルプのイベント関係に…
ヘルプのイベント関係に一通り目を通す事を強くお勧めします。

タイマーに限らずイベントはスタックされるという知識を持って
花ちゃんさんのサンプルで調べると良いでしょう。

・例えばユーザがフォームのボタンを10回連続で押したとします。
『ボタンを押された』という情報が10個メモリに格納されます。
 ↓
1つ目のイベントを取り出してきて処理します。
 ↓
1つのボタン押下イベントの処理に時間が掛かっていると、その
処理が終わるまで、残り9個の『ボタンを押された』という情報
が待機してます。
 ↓
1つ目が終わったらメモリから2つめのイベントを取り出して
きて処理します。

ただし、DoEvents が入ってくると話が変わってきます。詳細は
ヘルプをご覧下さい。
[ヘルプより抜粋]
>解説
>オペレーティング システムがキュー (処理の待ち行列) に
>入っているイベントの処理を終了し、SendKeys ステートメント
>のキューに入っているすべてのキー入力が送られるまで制御は
>戻りません。
↑つまり『処理の待ち行列に入っているイベントの処理を先に
実行する』という意味です。

投稿時間:2005/02/09(Wed) 14:03
投稿者名:やまめ
Eメール:
URL :
タイトル:
Re: ヘルプのイベント関係に…
ありがとうございました。
また、失礼な質問の仕方をして、すみませんでした。

教えていただいた情報から調べることにより、
 ・要は、DoEventsの有無によって、状況が変わること、
 ・多重に実行される可能性のあるイベント内では共通モジュールは使用できない、
ことが分かりました。

OS自体がどんな形でタスクを切り替えているのかとか、
通信待ち(外部機器の受信許可まち)のときはOSは他のタスクに制御を渡すのか、
等、Windowsの基本的なところが分かっていないことばかりです。

教えていただいたことを参考に、勉強します。

ありがとうございました。