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

以下のような形で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と関連する良く見られている質問

QiPhoneアプリ『box』について

iPhoneの空き容量が1GBを切ったため、無料で50GBもらえるクラウドサービス『box』を
インストールしました。
iPhoneが重い主な原因は写真だったので、「カメラロール」と「ビデオ」を移行しました。

しかし、iPhoneの設定→一般→使用状況を確認すると、「Box」は1.2GBとなっています。
この場合私のイメージだと、アプリは器で、写真は中身。
中身はクラウドに上がったのだから、器の大きさだけになって今は軽いはず…と思ってしまいます。

ちなみに、Dropboxも使用していて、ここにはboxの比ではないぐらい写真やビデオが入っていますが、
こちらは45.5MBとなっています(APPのサイズ:27.9MB、と出ますが…)。

boxの“中身”をクラウドに上げられないのであれば、使う意味がありません。
設定を間違えているのでしょうか?
PCサイトのboxも設定しましたが、iPhoneの操作で作ったboxの写真もビデオも観閲は出来ます。

アプリは英語表記や英語のサポートしかなく、恥ずかしながらただでさえ苦戦しながらの利用です。

言葉足らずでしたら申し訳ありませんが、お分かりになる方がいらしたら
ご教授いただけると嬉しいです。

ヨロシクお願いします。

iPhoneの空き容量が1GBを切ったため、無料で50GBもらえるクラウドサービス『box』を
インストールしました。
iPhoneが重い主な原因は写真だったので、「カメラロール」と「ビデオ」を移行しました。

しかし、iPhoneの設定→一般→使用状況を確認すると、「Box」は1.2GBとなっています。
この場合私のイメージだと、アプリは器で、写真は中身。
中身はクラウドに上がったのだから、器の大きさだけになって今は軽いはず…と思ってしまいます。

ちなみに、Dropboxも使用していて、ここにはboxの比ではないぐらい写真や...続きを読む

Aベストアンサー

キャッシュのクリアの方法です。

boxのアプリ画面の左上の横3本線をタップしてメニューを出します。

一番下に「設定」があります。
それをタップ。

中程のオプションの3番目の「キャッシュ」をタップ

すると現在の使用量が表示され、一番下に「キャッシュとデータを削除」(キャッシュされたファイルを…)があります。
ここをタップするとキャッシュがクリアされます。

私の場合まだ本格的には使用しておらず、20MB程度だったのですが、その分boxアプリでの使用量が減りました。

boxのバージョンは3.0.0
iPhone5(iOS: 7.0.4)です。

QUWSCのSELECT文の記述方法

UWSCのSELECT文について教えてください。

今IFB-ELSE-ENDIFを使って行っている条件文を
SELECT文でスマートに書き直しできますか?

たとえば
ifb cnt < 3 then
print "3未満"
elseif cnt >=3 and cnt <= 5 then
print "3~5"
else
print "6以上"
endif
みたいな範囲を持った条件式なんですが、
select文の範囲指定みたいな記述方法が分かりません。

select
case cnt < 3
print "3未満"
case cnt >=3 and cnt <= 5
print "3~5"
default
print "6以上"
endif
の様に書いても上手く動きません。

select文はこういう使い方はできないんでしょうか?

Aベストアンサー

dim num[10]
for i=0 to length(num)-1; num[i]=i; next
cnt = SLCTBOX(SLCT_BTN or SLCT_STR, 0, "番号を選んでね。",num)
select TRUE
  case cnt < 3
    print "3未満"
  case cnt >=3 and cnt <= 5
    print "3~5"
  default
    print "6以上"
selend
sleep(1)

Qiphoneに保存した動画などをクラウドに保存

iphoneへアプリでダウンロードした動画などをDropBoxなどのクラウドへ保存する方法を教えてください。できれば、PCを経由せずにiphone端末だけで動画やファイルの移動ができればいいなと考えております。詳しい方アドバイスを宜しくお願いします。

Aベストアンサー

使用している「ダウンロードアプリ」の仕様に依存するので、何を使っているのかを明記して質問された方がいいと思います。

DropBoxなどが、そのアプリと連携する機能を持っているか、逆に、そのアプリがDropBoxなどと連携機能を持っているか、いずれにしても、どちらかがどちらかを意識した仕組みを作り込んでいないと直接的な受け渡しはできません。

あとは、そのダウンロードアプリが、カメラロールなど何か他のものにファイルを渡す機能を持っていれば、段階を経て渡せる可能性はあります。

ちなみに、商用の動画配信サービスなどのアプリの場合は、著作権管理の観点から他のアプリにはデータを渡せない構造になっている可能性もあります。

Quwscのポーカーでのダブルアップの動作について

ポーカーをしたあとにダブルアップをするのですが、7以下が出たらhigh、8以上が出たらlowのボタンを押したいのですが、出たトランプの数を画像認識で確認して変数に数値をいれて条件にあったボタンを画像認識でクリックという動作はどのようにすればいいのでしょうか。
一応自分で書いてみたのが↓になります。ifb文とif文の違いがよくわからずサイトを見ながら書いたのでめちゃくちゃかもしれませんがよろしくお願いします。どう書けばいいのかと出来れば訂正をしていただければ助かります。お願いします。

ifb CHKIMG("heart-3.bmp")
val = 3
endif

ifb (val < 7)
if CHKIMG("high.bmp")
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
else
if CHKIMG("low.bmp")
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
endif

Aベストアンサー

>if、ifbに対して必ずendifで一つのif,ifbを閉じなければいけないという認識でいいんでしょうか?はっきりとは覚えていないのですが
はい、その通りです。
但し、下記の1行でIFを使用するケースでは、ENDIFは不要です。
IF 条件 THEN 真の処理 [ELSE 偽の処理] ・・・・1行でIFを記述([]内省略可能)

Q表計算作成をiPadとWinXPとクラウドで行う

表計算作成と更新をiPadとWindowsXPでクラウドで同期しながら行ないたいです。

簡単な表計算ならiPadで作成、仕上げはWindowsXP、メンテナンスはiPad

少し複雑な表ならWindowsXPで作成してiPadでメンテナンス

保存はローカルでなくクラウドで同期させたいです。
iPadではオフライン作業もしたいです。

日本語文字入力、表示が問題ないことが必要なのです。

EXCELが望ましいのですが、そうでない場合は相互互換同期がしやすいものがいいです。

自分なりにネットで調べてみると、WindowsXP作業はExcel、クラウドはDropbox、iPadはNumbersかなとは思いましたが、変換や同期がどの程度か不明です。

表作成はiPadではしない人が多いようですが、いちいちPCの場所に行かず、作業したいと思っています。

他の方法含めいいやり方を教えて下さい。

Aベストアンサー

まだ試してはいませんが、GoogleDrive(旧GoogleDoc)がiOSでの編集に対応したそうです。
http://japan.internet.com/allnet/20120913/5.html
エクセルではありませんが、これであればどちらからでも閲覧・編集などができるのでは無いかと思います。
ウインドウズにiWorksが出たらいいのですけれどね…

Q(UWSC)1行が長いので、途中改行ってできますか?

UWSCのプログラムで、1行が長いので途中改行したいと
思っているのですが、そういうことはできますか?

Aベストアンサー

アンダースコア _ でできますよ。
例を下に書きます。

a = _
1

QOnenoteをクラウドのように使用できますか?

MicrosoftのオフィスでOnenoteを使っているのですが、クラウドのように共有できるのでしょうか?
Onedriveではなく、できればDropboxで共有したいと考えています。
どなたか教えていただける嬉しいです・・・!

Aベストアンサー

現在のところDropboxはOffice onlineとは統合できるようになったようですが、onenoteとはいまだ統合していないようです。今後統合の可能性は無きにしもあらずですが、とりあえずはOneDriveで我慢するしかなさそうですね。ぼくとして使った感じはDropboxもOneDriveもさほど大きな違いは感じられません。

QPICのスイッチの入力誤作動の原因

PIC629を使っています。
スイッチのデジタル入力(アースするかしないか)
に応じて動くプログラムを作ったのですが、
長期的な私用の際に、アースの読み込みをしてくれなくなります。

チャタリング防止でカーボン抵抗33KΩと0.1μFのセラミックコンデンサを入れています。
スイッチは汎用のOn/OFFスイッチです。

他の動作は正常なのですが、スイッチのデジタル入力のみ
長期的に使用の際に誤作動(アースを読み込んでくれない)
が起きます。

PICも壊れていません。
またPICの足から直接アースにショートさせると
正常に動いたり、動かなかったりします。

原因として、カーボン抵抗やセラミックコンデンサの
破損は考えられるのでしょうか?
それとも他の原因が考えられるのでしょうか?

プログラムには原因はないと思われるのですが、、

Aベストアンサー

文章ではなかなか難しいですね。。。
スイッチからのラインに対し、33Kでプルアップと0.1μでグランドに接続している。そしてそのままPICの端子へ接続、と言った感じでいいのでしょうか?もしそうだとしたらチャタリング対策にはほとんどなっていないような気がします。そして回路としてとても壊れやすく非常に危険な回路です。まずはプルアップ抵抗を4.7K辺りに変更してさらにPICの端子直前に5.1Kの抵抗を入れてみてはどうでしょうか?
ちなみにPICでしたら、チャタ対策は例えばスイッチ押下時に内部でカウンタ(100msくらいかな?)を回しカウントアップしたところで再度スイッチ入力を見てその際にまだ押下状態だったらスイッチオンといった処理にすればより確実です。

Qクラウド音楽プレイヤーについて

iPhone5(softbank)をしようしていますが16Gで容量がいっぱいになりました。それで、クラウド音楽プレイヤーってのがAPPにあって、レビューを見ても結構いいみたいでが。
ヤフーBOX50GB(ヤフープレミアムです。)とかiCloudとかで、音楽を入れて聴くことは出来ないんでしょうか?
ただ、預けることは出来ても聴けない???ファイルを移動したりしなくてはいけない???
クラウド音楽プレイヤーなら、すぐ開いて選んで聴ける???でも、Google他IDを作らないといけないみたいだし。
初心者ですが、容量がいっぱいで困ってます。
アドバイスよろしくおねがいします。
もし、おすすめのAPPとかあれば教えてください。
http://www.teach-me.biz/iphone/app/m/cloudbeats.html

Aベストアンサー

無料のアカウントで試してみては如何でしょうか?
他にもDROP BOXなどがありますよ。

QUWSCでie内のデータを取得しエクセルにコピーする方法につい

はじめまして。
先日、UWSCを知り、始めたばかりのUWSC初心者です。
internetexplorerのtableのtd情報をあるだけ取得し、全てエクセルにコピーしたいのですが、その、書き方の質問になります。
最初はieとexcelを起動させたあとの記述は以下のような感じで書きました。

ww = IEGetData(IE,"TAG=TD",11)
sendstr(0,ww1)
ww2 =IEGetData(IE,"TAG=TD",12)
sendstr(0,ww2)
ww3 =IEGetData(IE,"TAG=TD",13)
sendstr(0,ww3)
ww4 =IEGetData(IE,"TAG=TD",14)
sendstr(0,ww4)
ww5 =IEGetData(IE,"TAG=TD",15)
sendstr(0,ww5)
ww6 =IEGetData(IE,"TAG=TD",16)
sendstr(0,ww6)

sheet1.range("a2").value = ww1
sheet1.range("b2").value = ww2
sheet1.range("c2").value = ww3
sheet1.range("a3").value = ww4
sheet1.range("b3").value = ww5
sheet1.range("c3").value = ww6


・・・とアナログ的に書けば、確かにie内のTDの1,2・・・の情報を取得して
excelにコピーできますが、TD1,2,・・・・の部分をあるだけ個別に取ってくる作業をもっと簡単に記述出来ると思うのですが、その書き方がわからなくて、ほんと困っています。。
あちこち参照して、for を組み合わせて使えばよいのは、なんとなくわかったのですが・・・tdデータの個別の抽出とエクセルに順序よく貼付する方法がわからなくて、どうしても思っているような作業がうまくできません。。
(下のような記述をしてみました。)

obj = ie.document.body.getelementsbytagname(\"td\")
for i = 0 to obj.length-1
tdn = obj.item(i).innertext
sendstr(0,tdn)
next
sheet1.range("a2").value = tdn



かなり初歩的な質問で、あきれてしまうかもしれませんが、どうか、宜しくお願いします。

はじめまして。
先日、UWSCを知り、始めたばかりのUWSC初心者です。
internetexplorerのtableのtd情報をあるだけ取得し、全てエクセルにコピーしたいのですが、その、書き方の質問になります。
最初はieとexcelを起動させたあとの記述は以下のような感じで書きました。

ww = IEGetData(IE,"TAG=TD",11)
sendstr(0,ww1)
ww2 =IEGetData(IE,"TAG=TD",12)
sendstr(0,ww2)
ww3 =IEGetData(IE,"TAG=TD",13)
sendstr(0,ww3)
ww4 =IEGetData(IE,"TAG=TD",14)
sendstr(0,ww4)
ww5 =IEGetData(IE,"TAG=TD",15...続きを読む

Aベストアンサー

操作対象のURLの提示がないので、UWSC掲示板の関連の話題を載せます。

http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=349&log=ON&cnt=3
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1451&log=ON&cnt=13
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1468&log=ON&cnt=12
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1787&log=ON&cnt=15


上は[掲示板検索ツール  UBTrek]で探しました。
http://sourceforge.jp/projects/uwsclib/

参考URL:http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi

操作対象のURLの提示がないので、UWSC掲示板の関連の話題を載せます。

http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=349&log=ON&cnt=3
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1451&log=ON&cnt=13
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1468&log=ON&cnt=12
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=1787&log=ON&cnt=15


上は[掲示板検索ツール  UBTrek]で探しました。
http://sourcefo...続きを読む


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

人気Q&Aランキング

おすすめ情報