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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1003
sti終了時にプロセスが残る問題+他一点。6解決


sti

リンク

2009/10/3(Sat) 15:24:56|NO.28124

何方か、検証を頼む。


//クローズボックスを押して終了しても、プロセスが残ったままなスクリプト。 //ついでにボタンも表示されない。こっちは対処方法不明。 #include "mod_menu.as" //mod_menu.asをインクルードしなければ正常終了。 //加えてボタンも表示される。 //oncmdを消し飛ばせば正常終了。ついでにボタンも表示される。 oncmd *OnCommand, WM_COMMAND //onexit命令を消し飛ばせば正常終了。ついでにボタンも表示される。 //gosubを書き加えても正常終了。しかしボタンは表示されない。 onexit *exit //入力ボックスを消し飛ばしても正常終了。ついでにボタンも表示される。 input a //何故だか分からないがボタンが表示されない。ついでに文字も。??? button "end",*exit mes "qwerty" stop *OnCommand stop *exit //onexitジャンプ後にウェイトを入れると正常終了。これが最も無難な対処方法か? //wait 1 end /* Alt+F4での終了も同様。画面こそ消えるもののプロセスは残ったまま。 カーソルがインプットボックス内に存在するのが原因か。 別のウィンドウを操作して、キャレットをインプットボックスから外すと正常に終了できる。 ボタンやテキストが表示されないのは本当に意味不明。こっちの方が謎。誰か教えて。*/

HSP3.2, XP homeにて確認。



この記事に返信する


inovia

リンク

2009/10/3(Sat) 15:44:33|NO.28125


input a
を設置した後すぐWM_COMMANDのメッセージが飛んできているので、
後ろの

button "end",*exit mes "qwerty"
が実行されていないようです。

同様に終了時にもonexitよりも先にWM_COMMANDのメッセージが
飛んできてしまっているのでウィンドウがないのにプロセスが
残ってしまうようです。


oncmd gosub *OnCommand, WM_COMMAND *OnCommand return
のようにサブルーチンジャンプにすれば問題ないと思います。



inovia

リンク

2009/10/3(Sat) 15:50:23|NO.28126

ちなみにmod_menu.as をインクルードしない時に正常に動くのは
WM_COMMANDが定義されていないからです。(つまり0)



sti

リンク

2009/10/3(Sat) 17:26:23|NO.28129

 返信感謝です。


*OnCommand mes WM_COMMAND stop

 で試してみると確かに*OnCommandに飛んでいました。
 stop, wait, awaitが無いと割り込み処理は為されないものだと
ばかり思っていました。一つ勉強になりました。
 しかし、


#include "mod_menu.as" oncmd gosub *OnCommand, WM_COMMAND onexit *exit input a button "end",*exit mes "qwerty" stop *OnCommand return *exit end

 上記のようにoncmd gosubにしても、入力ボックスにキャレットがあると、
やはりプロセスが残ってしまいます。(私の環境だけでしょうか?)
 尤もこれだけであればendの前にwaitを入れる、若しくはobjselで
別のオブジェクトにキャレットを移すなどの処理でどうにでもなりそうですが。

 WM_COMMANDについても少し調べてみましたが、このあたりも含めて
知識並びに理解が足りないということが痛感できました。
 もう少し精進したいと思います。

 inoviaさん、有り難う御座いました。多謝。



check

リンク

2009/10/3(Sat) 19:11:46|NO.28131

俺は終了させるときにExitProcess関数を使っている



inovia

リンク

2009/10/3(Sat) 19:28:42|NO.28132


onexit *exit *exit end end
みたくendを2回入れるか、

onexit gosub *exit *exit end return
onexit もサブルーチンジャンプにすると正常に終了します。



sti

リンク

2009/10/4(Sun) 14:48:12|NO.28138

>俺は終了させるときにExitProcess関数を使っている
 試してみたところ正常に終了できました。Viva!

>endを2回入れるか
 自分の環境では無理でした。二個で駄目なら三個、といった調子で
十個くらいまでendを入れてみましたがやはりプロセスが残ります。
 下駄を履かせたPenM(Dothan)を定格の1.5倍で動作させているのが
原因かと思い別の環境(core2duo, Xp pro)でも試してみましたが如何とも。

>onexit もサブルーチンジャンプにすると正常に終了します。
 仰る通りです。
 最初の投稿のコメントにも自分で書いておきながら失念していました。
 お恥ずかしい。

 結局、onexit gosubにした上でExitProcessを使ってみました。
 多少手間取りましたが何とか形になりました。

 inoviaさん、checkさん、御助言の数々有り難う御座いました。


 ところで、割り込みですがHSP プログラミングマニュアルを読み直した所、
しっかりと書かれていました。
>キーやマウス入力による割り込みは、stop命令および、wait、await命令で
>停止している時にのみ割り込みを受け付けます。
 暗にではありますが、ウィンドウメッセージによる割り込みは
停止していなくても受け付けますよ、と。

 片やF1 HELPドキュメントのoncmdの項目には
>割り込みジャンプは、stop命令および、wait、await命令で
>停止している時に割り込みを受け付けてジャンプを行います。
 と記載されているんですがこちらの記述はおそらく間違いなんですね。
 今となってはさして意味のない話ですが。



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