発生した場合にジャンプ先でend命令が実行できないようです。
HSPは最新版と3.51でテストしましたがいずれも同じです。
以下に再現用コードを示しますので、よろしかったらテストをお願いいたします。
#deffunc/#defcfunc 内で wait/await を使うと結構いろいろ起きます。
#packopt name "end_test" #packopt hide 1 // PostQuitMessage のテスト用 #uselib "user32.dll" #func PostQuitMessage "PostQuitMessage" int #define APP_NAME "end test" b="\n\ndeffunc 内実行中に\n右クリック→[はい]で終了しよう\n" b+="としても end命令 が return の\nような挙動になり終了できない。\n\n" b+="右クリック:ダイアログを表示\n左ドラッグ:ウィンドウを移動" bgscr 0,200,128,2,(ginfo_dispx-200)/2,(ginfo_dispy-150)/2: gsel 0,1 // 割り込み onclick gosub *click // クリックイベント onexit goto *exit // 終了処理 objsize 50,20: pos 142,8: button goto "×",*exit font "MS ゴシック",12 *loop1 // 通常ループ repeat 5,1 redraw 2 color 0,64,128: boxf: color 255,255,255 pos 10,10: mes "通常実行中 "+cnt+"/5"+b redraw 1 await 1000 if f { f=0: continue cnt } loop // deffunc内ループ loop2 goto *loop1 *click onclick 0 wait 5 // Vista 以降で必要?(稀に固まる) // 左ボタン if wparam=1 { sendmsg hwnd,$00a1,2,0 } // 右ボタン if wparam=2 { dialog "アプリを終了しますか?",2,APP_NAME if stat=6 { goto *exit } } onclick 1 f=1 return *exit dialog "end命令が実行されます。",0,APP_NAME // #deffunc loop2 を実行中に onclick で割り込み後にジャンプしてきた場合は終了できない // *click 内で onclick 0 をしているため onclick 無効のまま操作できなくなる end // こちらだと終了できる ;end: end // これでも終了できる ;PostQuitMessage 0: end // endがないとloop2が一瞬実行される // つまり1回目は無視され return と同じような挙動となっており // 2回目の end で終了できるということ #deffunc loop2 repeat 5,1 redraw 2 color 0,64,128: boxf: color 255,255,255 pos 10,10: mes "deffunc 内実行中 "+cnt+"/5"+b redraw 1 await 1000 // deffunc/defcfunc 内でウエイトを入れると不具合の原因に if f { f=0: continue cnt } loop return