HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0216
(´・ω・`)onkey における goto と gosub の違い3解決


(´・ω・`)

リンク

2018/2/16(Fri) 09:14:28|NO.82468

タイトルそのまんまなのですが。
なんか、こんな違いがあるよねという報告と、なんでこんな違いが出るのかしらという御相談。

以下の2つのコードを実行し比べていただきたいのですが、



font "MS ゴシック", 12 onkey goto *keyin stop *keyin mes wparam stop



font "MS ゴシック", 12 onkey gosub *keyin stop *keyin mes wparam return

①②ともに、実行中にカタカタとキータイプする分には問題ないのですが、
キーボードを適当にバアンと叩くと違いが現れるというか。
②では複数のキーを同時に叩いたら数値がダララッと表示されますが、①では1入力分だけが
表示される(あるいは全く表示されない)のです。

onkey文は、なるべくgosub~returnで処理しなさい、という教訓がここから得られるのですが、
ではなぜ、こんな違いが出るのかしらと。

以上、ひとりごとでした。(´・ω・`)



この記事に返信する


(´・ω・`)

リンク

2018/2/16(Fri) 09:27:58|NO.82469

ちと訂正。
正確には、同時入力できないキーの組み合わせ(例えばS/D/F/G)は当然②でも処理できないのですが、
同時入力できる組み合わせ(例えばA/S/D/F)でも、①ではちゃんと処理できないんです。

なぜかしら。(´・ω・`)



あまら

リンク

2018/2/16(Fri) 17:59:02|NO.82476

一瞬だけキーを押すということですよね?

あくまでも予想ですが、
割り込み等は、waitやstopのときに受け付けるという条件だったはずです。
それを踏まえて。

②のgosubの場合、
stopのとき、複数のウィンドウメッセージを同時に受け付け、
それらを1つ処理し、戻って次の処理をし……というのを繰り返す。
そのため複数のメッセージを処理できる。

①のgotoの場合
最初のstopで複数のウィンドウメッセージを受け取り、
一番最初のメッセージを処理した後に別のstopが入るが、
2番目のstopにはメッセージが何も無いために、そこで止まる。


つまりstopが複数あると最初のstopが保持していたウィンドウメッセージが失われる
ということではないかと考えました。



(´・ω・`)

リンク

2018/2/17(Sat) 14:30:20|NO.82491

ああ、なるほど!腑に落ちた!

1:onkey ~ の次の stop でキー割り込みの受付状態になる
2:同時に複数の複数のキューが入る
3:最初のキューの飛び先に移り、処理を開始
4:飛び先が stop で終わっている場合、それまでの割り込みがクリアされ再待機状態に
  return であれば割り込み元に戻り、残りキューの続きを処理する

……ということですかね?
割り込みは基本的に、gosub ~ return でなければマズイということか……

勉強になりました!(´ω`)



ONION software Copyright 1997-2025(c) All rights reserved.