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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1116
(´・(ェ)・`)画像提示プログラム9解決


(´・(ェ)・`)

リンク

2007/11/16(Fri) 13:26:01|NO.12427

画像提示プログラムを組んでいるのですが、
何枚か提示したらCPU使用率が100%になってしまい、
止まってしまいます。
画像がスクリーンのサイズと同じで、
容量が一つ2.25MBと大きいことが原因なのでしょうか。


notesel note chdir "画像用フォルダ" //画像ファイルの取得 dirlist note,"*.*",1 //画像があるかの判定 if stat = 0 : goto *error : else : pic = stat sdim e,128,pic repeat pic noteget e.cnt,cnt await 1 loop //画像のランダム化 randomize repeat pic kari = e.cnt r = rnd(pic) e.cnt = e.r e.r = kari await 1 loop //結果の一時保存先を用意 notesel files goto *jikken //ここから画像提示 *gazouteizi kaisuu=-1 kaisuu + 1 if KUMA >= pic : goto *resultsave cls 4 wait 10 redraw 0 picload e.kaisuu,1 redraw 1 onkey goto *check stop *check if iparam > 48 and iparam <54 : goto *check2 { else : kaisuu -1 : goto *gazouteizi } *check2 if iparam = 49 : goto *one if iparam = 50 : goto *two if iparam = 51 : goto *three if iparam = 52 : goto *four if iparam = 53 : goto *five *one onkey 0 dialog "1でいいですか?",2,"確認" if stat = 6 : result = 1 : goto *kakunou if stat = 7 : kuma - 1 : goto *gazouteizi *two onkey 0 dialog "2でいいですか?",2,"確認" if stat = 6 : result = 2 : goto *kakunou if stat = 7 : kuma - 1 : goto *gazouteizi *three onkey 0 dialog "3でいいですか?",2,"確認" if stat = 6 : result = 3 : goto *kakunou if stat = 7 : kuma - 1 : goto *gazouteizi *four onkey 0 dialog "4でいいですか?",2,"確認" if stat = 6 : result = 4 : goto *kakunou if stat = 7 : kuma - 1 : goto *gazouteizi *five onkey 0 dialog "5でいいですか?",2,"確認" if stat = 6 : result = 5 : goto *kakunou if stat = 7 : kuma - 1 : goto *gazouteizi //結果の一時保存 *kakunou noteadd e.kaisuu + "\t" + result,kuma,1 goto *jikken



この記事に返信する


Kpan

リンク

2007/11/16(Fri) 21:11:00|NO.12433

>CPU使用率が100%に
無限ループになっているんでしょう。いろんなところにdialog命令を入れて、
自分で処理の流れを追ってください。

----
提示されたスクリは、中途半端に切り出したのでしょうか、こちらでコン
パイルチェックできるような状態ではありません。(^^;

存在しないラベルに飛ばされても・・・
> goto *jikken

何の意味が?
> kaisuu=-1
> kaisuu + 1



(´・(ェ)・`)

リンク

2007/11/16(Fri) 23:03:17|NO.12439

Kpanさん、お返事ありがとうございます。

>kaisuu = -1
>kaisuu + 1

のところは全体的にループをさせたかったのですが、
途中複数のサブルーチンに飛ばそうと思い、
repeat命令を使うのをやめて、
変数『kaisuu』が画像の数を越えた時点で終了するように作っています。

>goto *jikken

のところは

>goto *gazouteizi

の書き間違いです。スミマセン。

画像提示は何度かは上手く行くのですが、
何度かすると応答なし状態になってしまいます。

ご指摘の通り切り出し方が中途半端だったので、
ちょっと修正してもう一度挙げてみます。
再度ご教授いただければ幸いです。



notesel note chdir "画像用フォルダ" //画像ファイルの取得 dirlist note,"*.*",1 //画像があるかの判定 if stat = 0 : goto *error : else : pic = stat sdim e,128,pic repeat pic noteget e.cnt,cnt await 1 loop //画像のランダム化 randomize repeat pic kari = e.cnt r = rnd(pic) e.cnt = e.r e.r = kari await 1 loop //結果の一時保存先を用意 notesel files goto *jikken kaisuu=-1 //ここから画像提示 *gazouteizi kaisuu + 1 if kaisuu >= pic : goto *resultsave cls 4 wait 10 redraw 0 picload e.kaisuu,1 redraw 1 onkey goto *check stop *check if iparam > 48 and iparam <54 : goto *check2 { else : kaisuu -1 : goto *gazouteizi } *check2 if iparam = 49 : goto *one if iparam = 50 : goto *two if iparam = 51 : goto *three if iparam = 52 : goto *four if iparam = 53 : goto *five *one onkey 0 dialog "1でいいですか?",2,"確認" if stat = 6 : result = 1 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *two onkey 0 dialog "2でいいですか?",2,"確認" if stat = 6 : result = 2 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *three onkey 0 dialog "3でいいですか?",2,"確認" if stat = 6 : result = 3 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *four onkey 0 dialog "4でいいですか?",2,"確認" if stat = 6 : result = 4 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *five onkey 0 dialog "5でいいですか?",2,"確認" if stat = 6 : result = 5 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi //結果の一時保存 *kakunou noteadd e.kaisuu + "\t" + result,kuma,1 goto *gazouteizi *resultsave chdir "結果保存庫" month = gettime(1) day = gettime(3) hour = gettime(4) minute = gettime(5) second = gettime(6) notesave "" + month + day + hour + minute + second + ".txt" stop



(´・(ェ)・`)

リンク

2007/11/16(Fri) 23:08:15|NO.12440

追加

dialog 命令でどこがおかしいか確認してみたのですが、
やはり picload 命令のところで止まっているようです。(・(ェ)・`)



f

リンク

2007/11/17(Sat) 01:51:42|NO.12460

何を焦っているのかしらんが、スクリプトを上げるなら、
上げる前に質問内容「以外の」エラーが出ていないかを、
確認してからにすれば良いんでね?


???(42) : error 16 : if命令以外で{〜}が使われています (42行目)

は我慢したが

#ラベルが存在しません [error]
#ラベルが存在しません [jikken]

で読むのを止めた。



(´・(ェ)・`)

リンク

2007/11/17(Sat) 08:43:01|NO.12463

fさんお返事ありがとうございます。

そそっかしくてスミマセン。
修正してみました。


notesel note chdir "画像用フォルダ" //画像ファイルの取得 dirlist note,"*.*",1 //画像があるかの判定 if stat = 0 : goto *error : else : pic = stat sdim e,128,pic repeat pic noteget e.cnt,cnt await 1 loop //画像のランダム化 randomize repeat pic kari = e.cnt r = rnd(pic) e.cnt = e.r e.r = kari await 1 loop //結果の一時保存先を用意 notesel files goto *gazouteizi kaisuu=-1 //ここから画像提示 *gazouteizi kaisuu + 1 if kaisuu >= pic : goto *resultsave cls 4 wait 10 redraw 0 picload e.kaisuu,1 redraw 1 onkey goto *check stop *check if iparam > 48 and iparam <54 : goto *check2 : else : kaisuu -1 : goto *gazouteizi *check2 if iparam = 49 : goto *one if iparam = 50 : goto *two if iparam = 51 : goto *three if iparam = 52 : goto *four if iparam = 53 : goto *five *one onkey 0 dialog "1でいいですか?",2,"確認" if stat = 6 : result = 1 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *two onkey 0 dialog "2でいいですか?",2,"確認" if stat = 6 : result = 2 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *three onkey 0 dialog "3でいいですか?",2,"確認" if stat = 6 : result = 3 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *four onkey 0 dialog "4でいいですか?",2,"確認" if stat = 6 : result = 4 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi *five onkey 0 dialog "5でいいですか?",2,"確認" if stat = 6 : result = 5 : goto *kakunou if stat = 7 : kaisuu - 1 : goto *gazouteizi //結果の一時保存 *kakunou noteadd e.kaisuu + "\t" + result,kuma,1 goto *gazouteizi *resultsave chdir "結果保存庫" month = gettime(1) day = gettime(3) hour = gettime(4) minute = gettime(5) second = gettime(6) notesave "" + month + day + hour + minute + second + ".txt" stop *error mes "画像がないです。" stop



ANTARES

リンク

2007/11/17(Sat) 13:56:39|NO.12469

【修正前】
notesel files
goto *gazouteizi
【修正後】
notesel files
repeat pic
noteadd e.cnt + "\t" + cnt,cnt
loop
goto *gazouteizi

誤: noteadd e.kaisuu + "\t" + result,kuma,1
正: noteadd e.kaisuu + "\t" + result,kaisuu,1

【修正前】
notesave sss
stop
【修正後】
notesave sss
chdir ".."
stop

 何がしたいのかよくわからなかったので、e.0が表示されないのは
そのままにしていますし、けっこういい加減な修正ですが、
とりあえずエラーは出なくなるはずです。
 「結果保存庫」フォルダは「画像用フォルダ」の下にあるものと仮定しています。

 2.25MBのbmpファイルも入れてみましたが、「CPU使用率が100%になり
止まってしまう」というのは、再現しませんでした。

 また、*check2を以下のように書けば*one〜*fiveは不要です。

*check2
onkey 0
num=iparam-48
dialog ""+num+"でいいですか?",2,"確認"
if stat = 6 : result = num : goto *kakunou
kaisuu - 1 : goto *gazouteizi



(´・(ェ)・`)

リンク

2007/11/18(Sun) 08:58:55|NO.12481

ANTARESさん、お返事ありがとうございます。
ご指摘ありがたく参考にさせていただきます。

修正後、何度か動かしてみたのですが、
依然画像を表示するところを何度か繰り返すと止まってしまいます。

Kpanさんのご指摘を参考にして、

【修正前】

wait 10 redraw 0 picload e.kaisuu,1 redraw 1 onkey goto *check

【修正後】

wait 10 dialog redraw 0 picload e.kaisuu,1 redraw 1 onkey goto *check

のようにして様子を見てみたのですが、
ダイアログボックスを消した後に止まるようです。
パソコンを二台使用してチェックをしてみたところ両方で止まるので、
パソコンが原因ではないと思うのですが…。



pizza

リンク

2007/11/18(Sun) 12:32:55|NO.12484

dialogを出すだけでは原因を見つけることは難しいかと。


dialog "picload前\nkaisuu="+kaisuu+"\nfile=["+e.kaisuu+"]" picload e.kaisuu,1 dialog "picload後" // これが出ればpicloadは問題ない



(´・(ェ)・`)

リンク

2007/11/18(Sun) 21:39:53|NO.12493

pizzaさん、お返事ありがとうございます!
アドバイス通りダイアログを用いて確認してみたところ、
画像が入っているフォルダ内に
「Thumbs.db」ファイルが存在しているのが原因でした。

フォルダオプションの設定では、
「すべてのファイルとフォルダを表示する」になっており、
また「縮小版をキャッシュしない」ように設定しており、
「Thumbs.db」ファイルができた原因は謎ですが、

【修正前】

dirlist note,"*.*",1

【修正後】

dirlist note,"*.bmp",1

のように変える事で、スタックすることは無くなりました。

アドバイスをくれたみなさま、ありがとうございます。



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