頻繁に誤動作が起き、原因が分からないので質問させてもらいます。

以下のような形で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以下

このQ&Aに関連する最新のQ&A

A 回答 (1件)

サンプルでは再現しないので、確証が持てません。


出来たらUWSCのバージョンを追記してください
また、初回は発生する/しない、とか各処理の状態を示すフラグや変数を定義して
どの状態の時に起きやすいか など詳細が分かれば何が原因か見えてくると思います。


現情報だけで考えられるものとすれば
・UWSC自体にバグがある
・スレッドが終了せずに残ったままで影響している
・もう1つのスレッドで参照しているつもりの変数がデッドロックしている?
・SLCTBOXのタイムアウトが0なので、キー入力関数内の他の処理が変なところでスタックしている?
・定義を重複してCallしていていないか?

1000行以下といってもスレッド複数走らせたりフォーム使用したりすると
重いマクロになったりもしますので、サンプルからではこれくらいしかわかりませんでした。


GetKeyStateを使ったミスでありがちなのが、入力を再受付するまでの時間が短すぎて
1回押したつもりが複数回受け付けてしまっている・・とかありますが
セレクト()で処理待ちするので考えにくいですし。

本件の根本解決になりませんが、メッセージの送受信方式で他の処理呼び出す形にしてみてはどうでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
使用環境書いてませんでしたね、申し訳ない。
UWSC: ver.5.2.0.0
OS: Windows10 Home 64bit
ハードの方は初期のCorei7にメモリは16GB(4GB*4)

その後も具体的な要因は特定出来ていませんが、
誤動作の有無に関わらずSLCTBOXが表示されている間は
他スレッド(メインループ含む)も停止してることと
メインループと一緒に動かしてるときだけ誤動作が起きるという点から、
「セレクト()呼び出し前にメインループを停止させる」という形でそれなりの安定は得られました。

メインループの停止のさせ方はお粗末なものですが、個人で使う分には許容範囲といったところです。

プログラム初心者なりに何とかしてみようと質問しましたが
色々手を出す前に、メインの中で余計な処理をさせない構造を作れるように努めようと思います。

ありがとうございました。

お礼日時:2016/01/15 19:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGASの.align 4,0x90の0x90の意味

Cソースをアセンブリしたとき、.align 4,0x90とでるのですが、.align 4,0x90の0x90はどういう意味ですか。align 4+NOPという意味ですか。それとも4Bを0x90で埋めろと意味ですか。どちらでしょう。

Aベストアンサー

困ったときはまずマニュアルを読む.

参考URL:https://sourceware.org/binutils/docs-2.24/as/Align.html#Align

QASP,net,cgi,javascript,php等の技術

ASP,net,cgi,javascript,php等の技術で、Webアプリケーションを開発するに当って
どれで作成したほうがいいですか?

機能としては、顧客管理、掲示板、グラフ表示、データベースアクセス等の機能を使います。

それぞれの言語で作成するあたって、長所と短所を頂けると幸いです。

Aベストアンサー

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくような場合はこれ以外の選択肢はないかも
しれません。

・javascript
通常はクライアント側で使う言語ですが、サーバ側で使うことも
あり得ます。たとえば、ASPでは、VBScriptの代わりにJavaScript
を使うこともできます。使って何のメリットがあるかは、よくわかり
ません。たとえば、ASPではVBScriptを使った方が動作は早いと
思います。

・PHP
よく知りません。

・あとはサーブレット・JSPも候補にあげた方がいいですね。
特に欠点もなく、無難に何でもこなせると思います。

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくよう...続きを読む

Qいったい,,,,.NETって。。。

質問タイトルがあまりにプアでごめんなさい。素人なもんで。。。。。
MS .NETって、端的にいって何ができるの?何が違うの?アプリケーションの開発環境が向上しただけ?例えば、VB6で作ったアプリでは動作不可能だったことが、.NET環境では可能になるとかあるんですか?

あとWinXPの管理ツールをみると、MS.NET Framework1.1 xxxxxがありますけど、何に使うの?

Aベストアンサー

>アプリケーションの開発環境が向上しただけ?

その認識でいいと思います。
開発側からすると大きな違いです。
ユーザのメリットとしては、ソフトの品質が上がり、安くなる。
# 現状はそうでもないか

新しく出来ることは、ノータッチデプロイメントぐらいですかね。

QLua, lua_pushstringに渡す文字列

ネット上のサンプルを見ると

lua_pushstring(L, "Hello world");

があります。

この"Hello world"の実体は、このスコープ内で何処かに存在することが保証されているだけで、スコープを抜けると直後に消えてしまうかもしれない、との記憶があります。

本来なら

lua_pushstring(L, strdup("Hello world"));

して、Lua側で渡されたポインタをfree()するべきだと思うのですが、そうしているサンプルがありません。

Luaを少し読むと、呼ばれた後で自前で複製しているようですが、その複製を行うまでにその内容が保存されているとことが前提となっているのでしょうか。

Aベストアンサー

「スコープを抜ける」を勘違いしているように思います。

スコープに入る

いろんな処理(「他の関数を呼び出す」も含む)

スコープを抜ける: これ以降、「スコープ内だけで有効なもの」を使ったときの保証が無くなる

というのが基本的な流れです。

lua_pushstring(L, "Hello world");
は「いろんな処理」にあたり、スコープを抜けることになりません。

もしlua_pushstringでスコープを抜けて、文字列が無効になるなら、
printf("Hello world");
の printf でスコープを抜けて、"Hello world"が無効になるので、printfが出力できない、という理屈になります。


また
https://www.lua.org/pil/24.2.1.html
には「Lua never keeps pointers to external strings(以下略)」と明記されています。



これとは別に。
文字列リテラルの寿命からして、「スコープを抜けたら消える」というものではありません。
過去の質問にこんなのがありました。
https://oshiete.goo.ne.jp/qa/7879297.html

「スコープを抜ける」を勘違いしているように思います。

スコープに入る

いろんな処理(「他の関数を呼び出す」も含む)

スコープを抜ける: これ以降、「スコープ内だけで有効なもの」を使ったときの保証が無くなる

というのが基本的な流れです。

lua_pushstring(L, "Hello world");
は「いろんな処理」にあたり、スコープを抜けることになりません。

もしlua_pushstringでスコープを抜けて、文字列が無効になるなら、
printf("Hello world");
の printf でスコープを抜けて、"Hello world"が無効になるので...続きを読む

Q[TeX,DVI,PS,PDF]

エラーが出て読み込めないepsファイルがあります。
どうすればいいでしょうか?
そもそも「endobj」とは何でしょうか?

** WARNING ** Didn't find "endobj".
** WARNING ** Failed to include image file "./421.eps"
** WARNING ** >>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]
** WARNING ** pdf: image inclusion failed for "421.eps".
** WARNING ** Failed to read image file: 421.eps
** WARNING ** Interpreting special command PSfile (ps:) failed.
** WARNING ** >> at page="17" position="(178.298, 728.302)" (in PDF)
** WARNING ** >> xxx "PSfile="421.eps" llx=16 lly=22 urx=797 ury=986 rwi=7810 "

●GSViewはEncapsulated Postscriptの仕様で定義された「一行が255文字以下」を満たしていないという理由を掲示した上で表示してくれたが、dvioutでは画像は表示されなかった。

●EPSファイルは、VisioのオブジェクトをAdobe Distiller Jにかまして作られたものだと思われる。
ここでエラーが出るせいなのかわからないが
このEPSファイルが貼り付けられたTeXファイルをコンパイルしたDVIではすべて前にある画像(JPEGをjpeg2psでPSに変換して作成)となっている。

こうして出来た(?)dviファイルをdvipdfmxに通して作られたPDFではそれらの画像(同様の方法を用いて作られたPSファイルを含む)は表示されているが、該当エラーが発生した画像は表示されなかった。

エラーが出て読み込めないepsファイルがあります。
どうすればいいでしょうか?
そもそも「endobj」とは何でしょうか?

** WARNING ** Didn't find "endobj".
** WARNING ** Failed to include image file "./421.eps"
** WARNING ** >>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]
** WARNING ** pdf: image inclusion failed for "421.eps".
** WARNING ** Failed to read image file: 421.eps
** WARNING ** Interpreting special command P...続きを読む

Aベストアンサー

>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]

それで確認しましたか?ここが最重要です.
endobj というのは読んで字のごとく,
オブジェクトの終端でしょう.
この手のエラーがでるのはEPSそのものが不正,
もしくはghostscriptがPDFに変換できないということで
はっきりいうとそのEPSに問題があるのです.

dvioutはEPSを表示する際にghostscriptを使うので
dvioutでも画像が表示できないということなら
ますますgsで変換できないものなのでしょう.
(注意:gsで変換できないのと表示できないは別のことです
gsで表示できるものが他の形式に変換できるかは別問題です)

visio由来のEPSはいろいろと問題を起こします.
大抵の場合はフォント周りで問題が発生します.

Ditillerをお持ちならdvipdfmxを使わなければ
うまくいくかもしれません

もしかするとghostscriptのバージョンをあげたりすると
うまくいくかもしれませんが・・・根本的には
EPSそのものを修正するしかありません.

>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]

それで確認しましたか?ここが最重要です.
endobj というのは読んで字のごとく,
オブジェクトの終端でしょう.
この手のエラーがでるのはEPSそのものが不正,
もしくはghostscriptがPDFに変換できないということで
はっきりいうとそのEPSに問題があるのです.

dvioutはEPSを表示する際にghostscriptを使うので
dvioutでも画像が表示できないということなら
ますますgsで変換できないものなの...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報