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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0519
123モジュール型変数4未解決


123

リンク

2013/5/19(Sun) 00:49:16|NO.54134

repeatで大量にメンバ変数に値入れてnewmodしているときに
wait が少ないと連続で同じ値が入ってしまいます。
こんなものかと普段はある程度スピード抑えて使ってたんですが
メンバ変数一つづつは作っていくわけですが全部作り終えてnewmodするのに
なんでwaitが一定以上ないと前の値が連続して入っちゃうんだろう?
なぜ処理が飛ぶんだろう?と不思議に思っていました。
メンバ変数作るときに使う変数を初期化してもなぜか前の値が入ってしまう。
ずっとこんなものだろうと漠然と使っていたのですが
これはなぜなんでしょう?自分の書き方が悪いのかな?



この記事に返信する


test

リンク

2013/5/19(Sun) 00:54:01|NO.54135

その現象が再現できるスクリプトを用意すれば、多くの人に検証してもらえます。



123

リンク

2013/5/19(Sun) 01:51:53|NO.54137

その現象が起こりだすのはある一定量の処理量か何かの原因があって
簡単にメンバ変数に値を入れて行くとなりません。
一定量か原因がわかりませんが変数の中身を作るのにイフとか関数に飛ぶ処理を重ねて行くと
気が付いたらなってるんです。
なのでいつも自分はなってるんですけど、その現象を再現したサンプルとなると
なかなか難しいのです。(原因がわからないので、簡単に作ると連続しない。)



ht.

リンク

2013/5/19(Sun) 04:09:39|NO.54139

本当にnewmodの問題なのかどうかを探るところから始めた方が良さそうです。
引数に指定する予定の変数がomcmdやbuttonなどでループと非同期的に変更されていたり、
逆にifなどによって前の引数が変更されないままだったり様々な可能性があります。

こういうデバッグなどは行われたのでしょうか。

id_auto_increment = 0 #module mod #modinit int _id if id_auto_increment@ != _id : dialog "指定されたIDが整合しません" id_auto_increment@++ return #global repeat 2000 newmod mod_list, mod, cnt await 0 loop



123

リンク

2013/5/19(Sun) 07:23:01|NO.54142

ht.様返信ありがとうございます。
一応中身のチェックのためにそういったデバッグは行ってます。
cntとか簡単なものはちゃんと入ってnewmodも正確に回数分作られてて
ifとか関数で使った引数や変数も使う前に初期化きちんとしてますし
omcmd系の上から下ヘの流れがぶった切られるようなものはまったく使いませんし
ボタンもGOTOとGOSUBしかないので自作で作って押してもどこかに飛んだりしません
そのままスクリプトは下に流れて行きます。
メンバ変数作るときは順番にイフと関数で作成して行ってnewmodするんですが
waitが相応に無いと関数とかIFで作ったものが何個かづつ連続で同じものが入ってしまう。
ただ、データはすべて文字列形配列に入れて数字で格納するべきものはnewmod時に
int(data(数))で数字に戻します。
waitが十分にあると完全に動作します。
なのでずっとこんなものなんだろうなあと思ってました…。



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