|
 |
|
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

| |
|
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 命令のところで止まっているようです。(・(ェ)・`)
|
|
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

| |
|
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
のようにして様子を見てみたのですが、
ダイアログボックスを消した後に止まるようです。
パソコンを二台使用してチェックをしてみたところ両方で止まるので、
パソコンが原因ではないと思うのですが…。
|
|
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
のように変える事で、スタックすることは無くなりました。
アドバイスをくれたみなさま、ありがとうございます。
|
|