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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0223
nonoHSP332で、hsp3hgプロセスが残る件29解決


nono

リンク

2013/2/23(Sat) 23:15:27|NO.52544

お世話になります。

下記のスクリプトを実行して、ウィンドウ右上の×ボタンで終了すると、
hgimg3をつかって再生している音楽が終了せず流れ続けます。
また、プロセスにhsp3hgが残ります。

環境は次の通りです。
HSPVer 3.32
windowsXP Home Edition
Service Pack 3
DirectXVer 9.0c

スクリプトは次の通りです。

#include "hgimg3.as" #module #deffunc test repeat await 100 loop return #global dmmini dmmload "a.ogg", 1, 0 ;仮ogg名です dmmloop 1, 0 dmmvol 1, 100 dmmplay 1 test stop

モジュール内ループから、音楽も含めて終了するための方法は何かあるでしょうか?
それとも、おにたまさんに報告したほうがよいのでしょうか?

宜しくお願いします。



この記事に返信する


暇人

リンク

2013/2/23(Sat) 23:52:26|NO.52545

OS環境同じで3.32のエディタから試したけど問題は無い
3.32ってどれ使ってる?

2013/01/29 3.32RC1
2012/12/18 3.32β2
2012/12/05 3.32β1

の3つがある
自分は今3.32β2のエディタ起動中だからそれで試した



暇人

リンク

2013/2/23(Sat) 23:55:41|NO.52546

後関係ないけど

>dmmvol 1, 100
ヘルプにも書いてあるが
は100じゃ無く0で最大で最小は-10000
100で最大にしたいならサンプルがある
sample\hgimg3\volsamp.hsp



fortunehill

リンク

2013/2/23(Sat) 23:58:32|NO.52547

/*私の場合WM_DISTROYをoncmd gosubで処理した場合プロセスが残るのは確認していますが
ENDで対応できたので無視しました。(332リリース版)*/



fortunehill

リンク

2013/2/24(Sun) 00:08:58|NO.52548

/*追伸:前回修正をお願いした部分が又駄目みたいですね(WM_QUITとの絡みか?)*/

stop #deffunc xxx onexit dialog return



ヒロソフ

リンク

2013/2/24(Sun) 01:57:37|NO.52549

ちょうど 2013/02/23に HSP3.32 正式版が公開されていますので
スレ主さんはこれを利用したのではないかと思います
(トップページの WHAT'S NEW?をよく見てください)

Win8 + HSP3.32 正式版でスレ主のコードを実行してみたところ
スレ主さんと同じ現象を確認しました
ただし、 HSP3.32β2及び同RC1で
同コードを確信したところ問題は発生しませんでした。

そこで HSP3.32RC1に同封されているhsp3hg.exeを
HSP3.32正式版で利用したところ正常に終了を確認しました。


HSP3.32RC1は
http://www.onionsoft.net/wp/archives/868
からDLできるので同封されているhsp3hg.exeを
HSP3.32正式版に同封されているhsp3hg.exeの代わりに
利用してみてください(差し替えればOK)



おにたま(管理人)

リンク

2013/2/24(Sun) 02:17:11|NO.52550

HSP3.22についてのご報告ありがとうございます。
調査してすぐに対応できるようであれば、修正版を出したいと思います。



暇人

リンク

2013/2/24(Sun) 03:27:07|NO.52551

あぁ、3.32正式版出てたんだ
dmm関係なくhsp3hgが起動してると
モジュール内で×ボタンで閉じると残るな
#deffuncでonexit使うとランタイムエラーでてOK押すとアプリケーションエラー・・・



nono

リンク

2013/2/24(Sun) 12:23:16|NO.52553

暇人さん、fortunehillさん、ヒロソフさん、おにたまさん、
短時間のうちに返信をくださりありがとうございます。

ヒロソフさんの仰るとおり、問題の症状はHSP3.32正式版で起きるものです。

提示する情報が足りず、暇人さんには、お手間をかけてしまいました。
すみません。また、dmmvolに関する情報をありがとうございました。

投稿したスクリプトの問題は、ヒロソフさんの方法で解決できました。

しかし、投稿したものとは別の、多数のモジュールで構成されたスクリプトを動かすと、
やはり、モジュール内から終了するときに音楽だけが鳴り続けます。
そのとき、残っているプロセスはhsp3hgではなく、hsp3.exeでした。

おにたまさんも調査してくださるようなので、当面は、以前のHSPのバージョンに戻して
スクリプトの続きを進めようと思います。

皆さん、ありがとうございました。



K-s

リンク

2013/2/24(Sun) 12:51:39|NO.52554

もう解決済みになっていますが、3.32正式版でもonexit命令とend2回でプロセス終了させることが一応できます。
nonoさんのスクリプトですと、

#include "hgimg3.as" #module #deffunc test repeat await 100 loop return #global onexit *bye dmmini dmmload "a.ogg", 1, 0 ;仮ogg名です dmmloop 1, 0 dmmvol 1, 100 dmmplay 1 test stop *bye end end ; 1回ではダメ
自分の環境だとこれでプロセスも終了できました。
厳密にはモジュールループ内の終了ではないのでダメかもですが。

end1回で終了しない問題、直ったと思ったんですがまた発症してるようで。
自分が報告して修正してもらったバグが原因だったら、なんかすいません…



K-s

リンク

2013/2/24(Sun) 13:05:41|NO.52555

あと、fortunehillさんのスクリプトは多分仕様かと。
http://www.onionsoft.net/hsp/v33/doclib/module.htm#CLEANUP
end、stop、wait、await、dialogなど時間待ちが起こる命令は使用できません




fortunehill

リンク

2013/2/24(Sun) 13:57:15|NO.52558

/*K-sさん 問題なのは終了時に実行されないと言う事です
モージュールによっては左記処理で終了処理を行っている場合があるので。*/



nono

リンク

2013/2/24(Sun) 14:04:08|NO.52559

K-sさん、返信をありがとうございます。

hsp3hg.exeファイルの差し替えをしても、終了できなかったスクリプトで
試してみたところ、音楽も含めて終了しました。
また、プロセスにも、hsp3hgとhsp3.exeとも残りませんでした。

K-sさんの方法で、スクリプトを進めたいと思います。
ありがとうございます。



暇人

リンク

2013/2/24(Sun) 14:43:34|NO.52561

ランタイムエラーはhsp3の時も出て
#deffunc の onexit 内でendを実行した時だった(Xで閉じた場合は出ないと言うかonexitが実行されてない感じ)
hsp3hgの場合はアプリケーションエラーも出る
3.32b2の方だと何もエラーは出ない

モジュール内からXで閉じられるとランタイムがhsp3でもend2回じゃないとプロセスが残る



fortunehill

リンク

2013/2/24(Sun) 14:50:34|NO.52562

/*記事検索で"windows8"を検索し記事番号NO.51416にある
修正ランタイムをリリース版332の内容と入れ替える事でnonoさんの問題も修正されました。
http://www.onionsoft.net/hsp/file/hsp332b3test.zip
(但しWM_QUITの発生は修復前に戻ります)
*/



暇人

リンク

2013/2/24(Sun) 15:01:42|NO.52563

あ、
>#deffunc の onexit 内でendを実行した時だった(Xで閉じた場合は出ないと言うかonexitが実行されてない感じ)
モジュール内で閉じられた時の話
end一回じゃ終了しないから当然か・・・



K-s

リンク

2013/2/24(Sun) 17:37:47|NO.52566

>fortunehillさん
すいません、言葉が足りませんでした。
モジュールのクリーンアップではdialogは使えない(実行されない)と言いたかったのです。

stop #deffunc xxx onexit a="終わり" dialog a bsave a+".txt",a,strlen(a) return
このスクリプトをどこかに保存して実行すると、
ウィンドウを閉じたときダイアログは出ませんがテキストは保存されたので、
クリーンアップ自体は機能しているのだと思います。
ただ自分の環境はWinXPなので、他の環境だと分かりません…



おにたま(管理人)

リンク

2013/2/26(Tue) 23:40:59|NO.52592

モジュール内のループ中にウインドウを閉じるとプロセスが残こる現象を修正したバージョンとして、HSP3.32aを作成致しました。
こちらで再度ご確認頂ければと思います。
問題ないようであれば、リリース版と差し替えて公開していきたいと考えています。

アーカイブ版
http://www.onionsoft.net/hsp/file/hsp332a.zip
インストーラー版
http://www.onionsoft.net/hsp/file/hsp332a.exe

fortunehillさんからご指摘頂いた、WM_QUITについてですが今回の修正で
内部的にはWM_QUITを発行しているのですが、流れとしてoncmdで捕捉される前に
終了プロセスに入ってしまうという形になっていますのでご了承下さい。



fortunehill

リンク

2013/2/27(Wed) 00:33:30|NO.52596

/*おにたま(管理人)さん 何かとありがとうございます。 */



暇人

リンク

2013/2/27(Wed) 07:18:01|NO.52599

>モジュール内のループ中にウインドウを閉じるとプロセスが残こる現象を修正したバージョン
これは直ってる感じ
だけど何かおかしい・・・

hsp3hg上でのwait/awaitの動作がおかしい

#include "hgimg3.as" repeat wait 100 title ""+cnt loop
hsp3hg上だとredraw 0 の効果がwait等挟まないと出ない

#include "hgimg3.as" redraw 0 repeat 25 //2〜5ぐらいあいうえおが表示される(不安定) mes "あいうえお" wait 0 loop title "完了" stop
その所為なのかこんな↓感じだとHSPのスクリーンが上書きされてhgimg3のスクリーンが見えない

#include "hgimg3.as" mes "あいうえお" hgini addbox m,20,20 regobj o,m hgdraw hgsync 16 stop
repeatさせれば、この現象は起きてないように見えるけどたまにちらつく(1秒程度で現象は無くなる)
10回程度repeatしてから抜けてtitleとか実行すると現象が復活したりする

3.32正式版は、この問題無し



nono

リンク

2013/2/27(Wed) 18:30:55|NO.52607

おにたまさん、HSP3.32aをありがとうございます。

投稿したスクリプトと、手元にある他のスクリプトで試したところ、
プロセスに何も残さず、音楽も含めて終了できました。

ただ、暇人さんが投稿されたスクリプトをこちらでも実行してみたところ、
暇人さんと同様の現象を確認しました。

1つめのスクリプトでは、描画領域内でカーソルを動かすと、動きに合わせて
カウントが急激に増加する現象も確認しましたので、ご報告します。



おにたま(管理人)

リンク

2013/2/27(Wed) 22:06:53|NO.52613

HGIMG3についての不具合のご指摘ありがとうございます。
古いバージョンのソースが混ざっていたため不具合が出てしまいました。
HGIMG3ランタイムのみ差し替えを行なったバージョンを同じ名前で再度作成致しました。
お手数かけますが、再度ダウンロードしてご確認頂ければと思います。

アーカイブ版
http://www.onionsoft.net/hsp/file/hsp332a.zip
インストーラー版
http://www.onionsoft.net/hsp/file/hsp332a.exe



暇人

リンク

2013/2/27(Wed) 22:59:05|NO.52614

お疲れ様です。
とりあえずNO.52599の問題は修正されました。

ちょっとバージョンによる動作の違いが気になったので書いときます。

hsp332正式版以上だと

stop #deffunc exit onexit end return
は終了時にランタイムエラー

#include "hgimg3.as" #usecom IDirect3DDevice8 "{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}" hgini hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV,,-1,PTRD3DDEV stop
これは問題なく終了できる


hsp332b2だと

stop #deffunc exit onexit end return
は終了時にエラーは出ない

#include "hgimg3.as" #usecom IDirect3DDevice8 "{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}" hgini hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV,,-1,PTRD3DDEV stop
こっちは終了時にアプリケーションエラーが出る


自分的にはhsp332正式版の動作で全然問題無い(アプリケーションエラー出るより全然良いので)
今までも#deffunc exit onexit 内のendでランタイムエラーが出るバージョンがあって
その場合SYSREQ_PTRD3DDEVでnewcomしても終了時エラーが出ないようです。
今試した限りでは hsp3.3aは hsp332正式版と同様の動作

で、どっちが想定した動作なのか分からないので一応報告を・・・



nono

リンク

2013/2/27(Wed) 23:37:53|NO.52615

おにたまさん、何度にもわたる対応をありがとうございます。

モジュール内のループ中にウインドウを閉じるとプロセスが残こる現象、暇人さんが
指摘された現象の全ての解決を確認しました。

こんなにも早く対応して頂き、ありがとうございました。



おにたま(管理人)

リンク

2013/3/1(Fri) 22:29:55|NO.52637

>暇人さん

ご指摘ありがとうございます。
エラーが発生する点は問題ありますね。
再度、終了時にランタイムエラーが発生する部分を修正したバージョンを作成し、ランタイムを差し替えました。
度々終了処理の所で混乱をさせてしまって申し訳ありません。
これは、HSP3.32でWindows8に対応するために終了処理部分の流れを変えたために起こっている不具合で、
それ以外の処理に影響する部分ではないことを念のため補足しておきます。

アーカイブ版
http://www.onionsoft.net/hsp/file/hsp332a.zip
インストーラー版
http://www.onionsoft.net/hsp/file/hsp332a.exe



暇人

リンク

2013/3/1(Fri) 23:38:58|NO.52640

ランタイムエラー出なくなりました

newcom com_PTRD3DDEVすると終了時にアプリケーションエラーが出るのは
hsp3のフォルダが階層深いと出るみたい・・・(バージョンでフォルダ別けてたから出たり出なかったり・・・)
D:\Program Files\hsp332a\
なら大丈夫だけど
D:\Program Files\hsp332a\hsp332a\
だとエラー・・・

C:\hsp332\
が推奨パスだから他の人は出なかったって事かな
原因が分かったので問題解決と言う事で・・・



暇人

リンク

2013/3/2(Sat) 03:13:02|NO.52642

フォルダの階層じゃなくてpathの長さだった・・・
自分の開発環境だけ問題無くしても
実行ファイルにした場合にもpathが38バイト以上だと終了時にアプリエラーになる確率が高い・・・



おにたま(管理人)

リンク

2013/3/4(Mon) 21:19:18|NO.52710

>暇人さん

確認とご指摘ありがとうございます。

>newcom com_PTRD3DDEVすると終了時にアプリケーションエラーが出る

この問題はまた別な要因がありそうなので、
調査を進めながら今後のバージョンで修正していきたいと考えています。



暇人

リンク

2013/3/6(Wed) 01:37:09|NO.52723

お疲れ様です。

使う人は少なそうだから重要度は低そうですが
ちょっと気持ち悪いのでお願いします・・・

Dドライブ直下にHSPフォフダを置いてもエラーが出る事があるので報告を

アプリケーションエラーが出る

#include "hgimg3.as" hgini hggetreq PTRD3D,SYSREQ_PTRD3D newcom com_PTRD3D, , -1, PTRD3D hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, PTRD3DDEV end

ランタイムエラーが出る

#include "hgimg3.as" hgini hggetreq PTRD3D,SYSREQ_PTRD3D newcom com_PTRD3D, , -1, PTRD3D hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, PTRD3DDEV delcom com_PTRD3DDEV end


正常終了

#include "hgimg3.as" hgini hggetreq PTRD3D,SYSREQ_PTRD3D newcom com_PTRD3D, , -1, PTRD3D hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, PTRD3DDEV delcom com_PTRD3D end

上のは正常終了出来てるように見えるんですが
↓だとアプリエラーが1割ぐらい出る・・・(連続で出たり数十回出なかったり)

#include "hgimg3.as" #uselib "d3dx9_36.dll" #func global D3DXMatrixTranslation "D3DXMatrixTranslation" var,float,float,float #module #deffunc tes_init double x,double y,double z dim Mat,16 D3DXMatrixTranslation Mat,x,y,z return 1 //返り値がある方がエラーが出やすいような・・・ #global tes_init 1,1,1 hgini hggetreq PTRD3D,SYSREQ_PTRD3D newcom com_PTRD3D, , -1, PTRD3D hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, PTRD3DDEV delcom com_PTRD3D end
これは、使い方に問題(8と9を一緒に使ってる)あるのかも知れないが・・・
newcomを使わないならエラーは出ない・・・

#include "hgimg3.as" #uselib "d3dx9_36.dll" #func global D3DXMatrixTranslation "D3DXMatrixTranslation" var,float,float,float #module #deffunc tes_init double x,double y,double z dim Mat,16 D3DXMatrixTranslation Mat,x,y,z return Mat(12) #global hgini tes_init 1,1,1 title ""+ stat wait 10 end



暇人

リンク

2013/3/6(Wed) 19:08:51|NO.52737

アプリケーションエラーを出さないようにする
対処方法が分かりました。

IDirect3DDevice8_GetRenderTargetしてReleaseしないまま終了した場合だけエラーが出ない事に気付いたので
試しにIDirect3DDevice8_AddRefを追加したらエラーが出なくなりました
delcom com_PTRD3Dも無くて良くなりました

#usecom IDirect3DDevice8 "{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}" #comfunc global IDirect3DDevice8_AddRef 1 #include "hgimg3.as" hgini hggetreq PTRD3D,SYSREQ_PTRD3D newcom com_PTRD3D, , -1, PTRD3D hggetreq PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, PTRD3DDEV IDirect3DDevice8_AddRef com_PTRD3DDEV end
対処方法からエラー原因を推察すると
hgimg3側のReleaseのタイミングか順番回数なんかに何か問題がありそう・・・

この対処方法を使うとパスの長さでエラーが出るの場合があるのも解決しました
が、パスの長さでエラーが出るのは他にも何か問題を抱えてそう・・・



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