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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0416
HK2標準エラー処理3解決


HK2

リンク

2011/4/16(Sat) 22:30:51|NO.38459


#uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,int #func KillTimer "KillTimer" int,int SetTimer hwnd,1,2000,0 oncmd gosub *timer,0x0113 onexit *exit stop *exit KillTimer hwnd,1 end *timer mes sublev // if(sublev==1){ font // } return

このソースは、パラメーターを省略したfontを実行させてエラーを発生させています。

*timerは2秒おきに実行され、
一度目のfontの実行でエラーダイアログが出て、
二度目のfontで落ちます。

このソースでは2秒おきなので特に問題ありませんが、
このサイクルが短いときは一瞬で消えてしまうので、
どこでエラーが発生したのかがわかりません。

タイマーを使わなくても、
2重でエラーを発生させることができればこの現象は発生するようです。

この問題を解消するため、
HSPでエラーが発生したとき、標準で割り込みが実行されないようにしてください。



この記事に返信する


f3d

リンク

2011/4/16(Sat) 23:48:47|NO.38460

>>この問題を解消するため、
>>HSPでエラーが発生したとき、標準で割り込みが実行されないようにしてください。

タイマーはあまりつかったことないけど、
少し図々しくないですか?
あなたがタイマーを使いこなせてない可能性はないのでしょうか?



いつき

リンク

2011/4/17(Sun) 00:06:01|NO.38461

自分も勘違いしそうになったけど、題目は「提案・要望」だから、
みんなで考えよう的なフリだと思うんですけどね。



HK2

リンク

2011/4/17(Sun) 07:25:39|NO.38468

f3dさん
>少し図々しくないですか?
回避できないことはないので、図々しいかもしれません。


#uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,int #func KillTimer "KillTimer" int,int SetTimer hwnd,1,2000,0 oncmd gosub *timer,0x0113 onexit *exit onerror *error stop *exit KillTimer hwnd,1 end *timer mes sublev // if(sublev==1){ font dupptr x,0,4 mes x // } return *error onerror 0 onkey 0 onclick 0 oncmd 0 onexit 0 dialog strf("#Error %d in line %d\n-->内部エラーが発生しました(%d)",wparam,lparam,wparam),1,"Error" end

このソースではエラーが発生したときに*errorにジャンプし、
*errorのなかではまず各種割り込みを停止させ、(停止を忘れると悲惨なことになるかも)
その後ダイアログを表示させています。

また、fontの下に追加したものはエラー1「システムエラー」を発生させるためのものです。
fontをコメントアウトすると、これが実行され、エラー1が発生します。
エラー1は*errorにジャンプしないので、2秒後に強制終了します。

>あなたがタイマーを使いこなせてない可能性はないのでしょうか?
否定できません。
なお、タイマーを使わなくてもエラーが二重で発生したときに強制終了します。


oncmd gosub *cmd,0x0200//WM_MOUSEMOVE stop *cmd mes sublev // if(sublev==1){ font // } return

このソースはウィンドウ上でマウスを動かすと*cmdが実行されます。
こちらも二重のエラーが発生すると強制終了します。



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