頻繁に誤動作が起き、原因が分からないので質問させてもらいます。
以下のような形でSLCTBOXを使った関数を使ってます。
==サンプル==
THREAD キー入力()
//メインループ
While true //テスト用
Print a*10 +"秒経過"
Sleep(10)
a=a+1
wend
//== ★関数定義★ ==//
PROCEDURE キー入力()
while true
Ifb GetKeyState(VK_NUMPAD0)
Print "セレクト()へ"
セレクト()
Endif
Sleep(0.1)
wend
FEND
PROCEDURE セレクト()
SELECT SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージ0", "AAA", "BBB", "CCC" )
CASE SLCT_1
Print "AAA を選択しました"
変数1 = SLCTBOX(SLCT_BTN +SLCT_NUM, 0, 300,300, "表示メッセージA", "A0", "A1")
CASE SLCT_2
Print "BBB を選択しました"
SELECT SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージB", "B0", "B1", "B2" )
CASE SLCT_1
変数2=100
CASE SLCT_2
変数2=180
CASE SLCT_3
変数2= INPUT("変数2を入力", 変数2, false)
DEFAULT
Print "セレクトBBB無効です"
Sleep(1)
SELEND
CASE SLCT_3
Print "CCC を選択しました"
変数3 = SLCTBOX(SLCT_BTN +SLCT_STR, 0, 300,300, "表示メッセージC", "C0", "C1", "C2" ,"C3", "C4")
DEFAULT
Print "セレクト0無効です"
Sleep(1)
SELEND
FEND
== ここまでサンプル ==
※上記サンプルも実際使っているものも単体で動かすと誤動作は起きません。
◆起こる誤動作
サンプル最初の
SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージ0", "AAA", "BBB", "CCC" )
を例にすると、
・指定座標に表示されない
指定座標の(300,300)ではなく、無指定の時と同様の位置にボックスが表示される。
・要素(項目がズレる)
"表示メッセージ0"の位置に”AAA”と表示されて、ボタン(項目)が”BBB”と”CCC”の二つになる。
・選択した項目以外へ分岐する
ボックス表示が正常なときでも、"AAA"を選択したときに「CASE SLCT_1」ではなく別のCASEに飛ぶことがある。(主にPrintで確認)
考えられる原因としてどのようなものがあるでしょうか?
正常な動作が続くときもあれば、セレクト()の呼び出し一回目から誤動作という場合もあります。
単体で正常動作する以上記載した部分以外が原因だとは思うのですが全ては書けないので
SELECT や SLCTBOX の正常動作の妨げになる例だけでも良いので
改善のアドバイスお願いします。
補足)念のため使用してるプログラム全体のその他の情報
・プログラム内で関数セレクト()の外でSLCTBOXを使ってる箇所はありません。
・THREADはもう一つ、複数の変数の状態をFUKIDASIで表示するもの
・変数と関数の定義は定義用ファイルにまとめてCALLで呼び出している。
・UWSファイルは全体で1000行以下25KB以下
No.1ベストアンサー
- 回答日時:
サンプルでは再現しないので、確証が持てません。
出来たらUWSCのバージョンを追記してください
また、初回は発生する/しない、とか各処理の状態を示すフラグや変数を定義して
どの状態の時に起きやすいか など詳細が分かれば何が原因か見えてくると思います。
現情報だけで考えられるものとすれば
・UWSC自体にバグがある
・スレッドが終了せずに残ったままで影響している
・もう1つのスレッドで参照しているつもりの変数がデッドロックしている?
・SLCTBOXのタイムアウトが0なので、キー入力関数内の他の処理が変なところでスタックしている?
・定義を重複してCallしていていないか?
1000行以下といってもスレッド複数走らせたりフォーム使用したりすると
重いマクロになったりもしますので、サンプルからではこれくらいしかわかりませんでした。
GetKeyStateを使ったミスでありがちなのが、入力を再受付するまでの時間が短すぎて
1回押したつもりが複数回受け付けてしまっている・・とかありますが
セレクト()で処理待ちするので考えにくいですし。
本件の根本解決になりませんが、メッセージの送受信方式で他の処理呼び出す形にしてみてはどうでしょう。
回答ありがとうございます。
使用環境書いてませんでしたね、申し訳ない。
UWSC: ver.5.2.0.0
OS: Windows10 Home 64bit
ハードの方は初期のCorei7にメモリは16GB(4GB*4)
その後も具体的な要因は特定出来ていませんが、
誤動作の有無に関わらずSLCTBOXが表示されている間は
他スレッド(メインループ含む)も停止してることと
メインループと一緒に動かしてるときだけ誤動作が起きるという点から、
「セレクト()呼び出し前にメインループを停止させる」という形でそれなりの安定は得られました。
メインループの停止のさせ方はお粗末なものですが、個人で使う分には許容範囲といったところです。
プログラム初心者なりに何とかしてみようと質問しましたが
色々手を出す前に、メインの中で余計な処理をさせない構造を作れるように努めようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
歩いた自慢大会
「めちゃくちゃ歩いたエピソード」を教えてください。 長時間でも長距離でも結構です。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
UWSCのSELECT文の記述方法
その他(プログラミング・Web制作)
-
UWSCを使用して、ドロップダウンリストを操作
フリーソフト
-
変数内に入った文字列の結合 UWSC
その他(プログラミング・Web制作)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
実行中の変数の中身をイミディ...
-
バッファリング処理を高速化し...
-
初回起動のみ判別したい
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
VBAでPDFのコピーとリネームを...
-
メモリをアドレスを直接指定し...
-
dieやPerl自体でエラーが発生し...
-
プルダウンメニューで中央表示
-
C++ APIについて エラーコード...
-
16進の10進変換について
-
Perl メール 初心者
-
<SELECT>タグの折り返し
-
VB2010 のユーザコントロールの...
-
int(input("○○"))の使い方
-
Net::Telnetでタイムアウト時間...
-
auのiPhoneでの受信メールが文...
-
メタタグのキーワードはいくつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
初回起動のみ判別したい
-
VB6で、長い時間かかる処理...
-
実行中の変数の中身をイミディ...
-
処理終了後、他のページへジャ...
-
UWSC SLCTBOXもしくはSELECTに...
-
C言語のflagの使い方が分かりま...
-
SetDlgItemInt( ) c++
-
VBAのCallステートメントについて
-
フラグをたてる、、の意味を教...
-
回数を指定しないで空白行まで...
-
perl:ループのカウンタ変数の値...
-
Valueの値によってActionの送信...
-
問題作成のWebアプリの作り方を...
-
arduino の割り込み処理について
-
夕方くらいから急にGoogle検索...
-
c言語のプログラミングの問題で...
-
プログラミング、VB.NET(初歩です)
-
内部処理中にNow Loadingみたい...
-
IIS7.0でPerlのCGIにてバックグ...
-
教えてください。 画像処理のプ...
おすすめ情報