過去ログ

■過去ログ記事に対して削除や返信は出来ません

UWSC 掲示板

[HOME] [削除] [検索] [過去ログ] [管理人用]

新規投稿

重いです 
いつもお世話になります
以下のようなスクリプト実行時の動作が重いのですが
原因は何でしょうか
//////////
public s
ID = GETID("- メモ帳","Notepad")
s=status(id,st_title)

thread cyusi()
input("入力")
call .\フォーム.uws
call .\フォーム2.uws

procedure cyusi()
while true
ID = GETID("- メモ帳","Notepad")
t=status(id,st_title)
ifb s<>t then

exitexit
endif
wend

fend
DATE:2007/7/26(Thu) 09:30 No.971


RE:重いです いりや

cyusi() の while true のすぐあとに SLEEP(1) を挿入
DATE:2007/7/26(Thu) 09:51


RE:重いです 

いりや さん
遅くなりすみません
やってみます
DATE:2007/7/26(Thu) 23:14


RE:重いです 

いりや さん
解決いたしました
ありがとうございます

でも 何故 sleepを入れると
軽くなるのでしょうか・・・・
DATE:2007/7/28(Sat) 08:32


RE:重いです ZEROSAM

CTRL+SHIFT+ESCを押して、タスクマネージャのパフォーマンスを見ると
分かりやすいと思いますよ。

要するにWhile True 〜 Wendでループしていますので、このスクリプト
(プロセスはUWSC.exe)がCPUを使いまくるのです!
ですからPC全体の動作も遅くなりスクリプト自体も重いということになります。

このようなループ処理などのように、長時間処理を行う場合には適度に
他のアプリのためにCPUを空ける必要があり、それを実行するのがSLEEPです。
通常SLEEPは「待つ」という意識で使用すると思いますがそういう意味もあります。
DATE:2007/7/28(Sat) 09:32


RE:重いです 

ZEROSAM さん
よくわかりました
ありがとうございます

>適度に
何か法則とか
きまりはあるのでしょうか・・・・・
DATE:2007/7/28(Sat) 09:56


便乗質問です とも

UWSC のSleep() は
Windows API のSleep と同等と考えてよいでしょうか?
CF
http://msdn.microsoft.com/library/ja/default.asp?URL=/library/ja/jpdllpro/html/_win32_sleep.asp

具体的には、Sleep(0) の効果をお聞きしたいのです。
DATE:2007/7/28(Sat) 15:37


RE:重いです umiumi

>Windows API のSleep と同等と考えてよいでしょうか?
同じです。
Sleep(0)は他スレッドにタイムスライスの残り時間を譲ります、UWSCでの使い道があるかは?です
DATE:2007/7/28(Sat) 23:50


RE:重いです とも

回答、有難うございます。

Sleep(1.0)とか、0.5 とか、結構フィーリングで突っ込んでいるところがあったのですが、0 でもいいのかな?と思っていました。

実際に効果が分かりにくいのですが、折をみて検証してみたいと思います。
DATE:2007/7/29(Sun) 01:26


RE:重いです ZEROSAM

Sleep(0)って効果ありますよね。
少なくとも、無限ループでSleep(0)を入れておかないと、
UWSCがウインドウメッセージを処理できなくなります。

ウインドウメッセージを処理できない場合どうなるかというと
XPでは「応答なし」になりますよね。(停止ボタンすら押せない)

これは顧客プログラムを2000からXPに移行する案件を担当した時に
問題があり調べたことがあります。
そのプログラムは、かなり長いループ処理をメインスレッドでそのまま
実行していました。(これ自体がよろしくない。)
この状態でも2000ではアプリの操作はできないだけで処理が終われば
操作ができるようになるだけなのですが、XPでは一定時間(十数秒?)
メッセージの応答が無い場合、そのソフトがフリーズしていると判断して
「応答なし」とタイトルに表示し、かつ右上の閉じるボタンをユーザが
終了できるように「勝手に有効」にしてしまいます。
(うちの会社では、こういうのをゲイツマジックと言ってます(笑))
ソースは忘れましたが、時間なども明示されてませんでした。

顧客事象では、実行中に出していたモーダルウインドウがモーダレスになり
実行ボタンが押せるという話だったと思います。
ちなみにどうしたかというと、単にスレッド化しただけで解決です。。。

//応答なしになる(覚悟ができたら実行(笑))
While True
WEnd

//応答なしにならない
While True
Sleep(0)
WEnd


南さん
>何か法則とか
>きまりはあるのでしょうか・・・・・

基本的には、無限ループには入れると考えてもらえれば良いかと。
単純な無限ループ(上記)や特定ウインドウが出るまでや、ウインドウが変わるまで
なども「いつループを抜けるかわからない」ので、その様にすべきでしょう。
ウインドウをチェックするような場合は、チェック間隔をどうするかなので
Sleep(0.1)でもSleep(1)でも、ご自身で決めればよいかと思います。
DATE:2007/7/29(Sun) 12:41


RE:重いです ZEROSAM

あれ?そうでもないですね。
空行入れるだけで「応答なし」回避できました。。。

While True

WEnd
DATE:2007/7/29(Sun) 12:50


RE:重いです いりや

>適度に
何か法則とか
きまりはあるのでしょうか・・・・・

@while ループ中の Window ID 比較はどのくらいの頻度で行われる必要があるか考える (例: 最悪 3 秒で比較を終えることができる)
A while ループの中の Window ID 比較が一回につきどのくらい時間がかかるけ計測する
B Aの結果、0.01 秒かかったとすると、1秒につき 100 回比較が可能とわかる
C @の要件が例で示したように最悪 3 秒で比較を終えればいいのであれば、while の先頭に SLEEP(3 - 0.01) もしくは SLEEP(3) を入れる

精度はさておき、@の要件を実現するためにこんな風にパラメータを決めるのが常套手段です。

Aの測定結果ですが、大体は 0.01 秒未満になることが多いようです。SLEEP() のパラメータの最小値は 0.01 です。@の要件から、遅くとも t 秒で比較を終えて欲しいならば、SLEEP(t) とすると楽でしょう。
DATE:2007/7/29(Sun) 14:58


RE:重いです いりや

> 空行入れるだけで「応答なし」回避できました。。。

ZEROSAM さん、あて推量ですが、空行を UWSC は認識して空行に対する解釈をエンジンは試みているのではないでしょうか。つまりそこに制御が移ったタイミングでは、メッセージに応えられる状況にあり、無応答を回避できた、というシナリオです。

#インタープリタ言語処理系だと内部でこうしたイベントハンドラの挙動を、外の世界から正確に把握するのは困難ですね・・・、ソースコードが手元にないと。
DATE:2007/7/29(Sun) 15:23


RE:重いです 

皆様 ご教授 ありがとうございました
DATE:2007/7/31(Tue) 09:24


IE操作 
KIDさんのIEを操作するサブルーチンのuwsのソース落として使わせてもらったんですが

Uスクリプト:COM_Error
IE_SUB.UWS:22行目:IETEMP = CREATEOLEOBJ("InternetExplorer.Application")

とエラーがでてきて使えません。

まだこのソフトは使ったばかりなので基本的なことかも知れませんが
どうすればいいのか教えてもらえませんか?
DATE:2007/7/31(Tue) 10:20 No.984


RE:IE操作 umiumi

IEが起動しないのであれば、セキュリティソフトやWebDavクライアントソフト等の
常駐ソフトでCOM(スクリプト)を制限していないか確認して下さい。
DATE:2007/7/31(Tue) 22:34


教えていただけませんか?。 平凡
まだ、はじめて1週間の超初心者です。

使用OS VISTA
やりたいことはYahooオークションHP上のボタンをクリックしたい
毎回変わるのでIERECでやるとエラーがでてしまいす。
毎回変わる部分です。
IE.Navigate("http://edit19.auctions.yahoo.co.jp/jp/config/resubmit",0,"",Encode("category=2084214913&cc=jp&thumbnailwidth=133&thumbnailid=022&_sJvwMMgp3Pv0.bE0J8t6IWcaq5RpA8apYnZUijR.JxbR6Po&st_time=01",CODE_BYTEARRAY),"Content-Type: application/x-www-form-URLencoded<#CR>") // TD

ソース表示を見てみたところ
<input type=hidden name="st_time" value="01">

だと思われます。
すみませんがだれか教えていただけませんか。
よろしくお願いします。
DATE:2007/7/30(Mon) 23:34 No.982


追記 平凡

ボタン部分の表示
【利用規約とガイドラインに同意して出品する】

よろしくお願いいたします。
DATE:2007/7/31(Tue) 20:42


RE:教えていただけませんか?。 眠たい詩人

であればソースは
<INPUT TYPE="submit" VALUE="利用規約とガイドラインに同意して出品する">
ですね。ご指定のボタンを押すテストを行うと、出品手数料が発生してしまいます。なので、動作確認は避けました。

IE.document.forms(0).elements(65).click()
 または
IE.document.all.tags("input").item(65).click()

『65』の部分が不定ならば

for i=0 to IE.document.all.tags("input").length-1
  ifb "利用規約とガイドラインに同意して出品する"=IE.document.all.tags("input").item(i).value
    IE.document.all.tags("input").item(i).click()
  endif
next

過去ログに<input>タグを操作する例があります。一読をおすすめします。このページの最下に検索ツールがあります。
IESetData()関数でもたぶん可能です。
DATE:2007/7/31(Tue) 21:17


ありがとうございました 平凡

眠たい詩人さんありがとうございました。
今度は過去のログを見てから質問させていただきます。
大変助かりました。<m(__)m>
超初心者なのでまたご質問させていただくことがあるかと思いますがよろしくお願いいたします。
DATE:2007/8/1(Wed) 00:40


CLKITEMが動作しない事について ショウ
 皆様はじめまして、お時間よろしければ相談にのっていただければありがたいです。

 以下のスクリプトを実行しても、CLKITEM 関数の部分が何も起こらず処理が行われません。書き方が何かまずいのでしょうか?

 ご指摘宜しくお願い致します。 

ExcelID = GETID("Excel")
GETID("Excel")
CLKITEM(ExcelID, "開く")

 なお、小生の環境は

 OS:XP Pro SP2
Excel:2002 SP3

です。
 
DATE:2007/7/31(Tue) 09:42 No.983


RE:CLKITEMが動作しない事について ZEROSAM

質問に何を実現したいのかが抜けていますね。
やりたいのは、こういうこと?

ExcelID = GETID("Excel")
CTRLWIN(ExcelID, ACTIVATE)
CLKITEM(ExcelID, "開く",CLK_ACC)
DATE:2007/7/31(Tue) 19:36


RE:CLKITEMが動作しない事について ショウ

 ZEROSAMさん、お返事ありがとうございました。
解決致しました。

 目的の記入を忘れてしまって申し訳ありませんでした。
私が行いたかった事は、ZEROSAMさんが示して下さった通り、
 「ジャンプ」、「開く」といったExcelのメニュー操作を
CLKITEM関数で行いたかったのです。

 メモ帳や他のアプリでは、質問で載せたな書き方でメニュー操作をできたのに、ExcelやWordでは反応がなかったため、何故?と色々と試してみたのですが、

原因が分からずショートカットキー関数で操作を代用していました。ZEROSAMさんのおかげでより安定性の良いプログラムが作れそうです。
本当にありがとうございました。

 すみません、もしよろしければ更に質問させていただいてもよろしいでしょうか?

 CLKITEM関数のACCはどういう意味なのでしょうか?
ヘルプでは、アクセシビリティ用インターフェース経由によるクリックと書かれていたのですが、今回の事でExcelやWordがアクセシビリティ用インターフェースを用いている?という風に考えたのですが、
アクセシビリティ用インターフェース経由によるクリックを用いなければならないアプリの見分け方のようなものが分かりませんでしたので。

 どうかその辺についても、お時間よろしければご教授頂ければ幸いです。

 
DATE:2007/7/31(Tue) 20:12 MAIL


RE:CLKITEMが動作しない事について umiumi

Win32APIで作られた一般的なアプリであれば、UWSCの関数で処理できますが
MSのOfficeアプリは COMと呼ばれる技術で出来ており APIで処理できません
ので Officeアプリは通常COMを利用して制御をします。

ACC(アクセシビリティ用インターフェース)は障害者向けの支援技術で
スクリーン・リーダー等に使われたりします。
汎用性がありますが、非常に重く遅いです。
のでACC指定は、APIでもCOMでも処理不能なもの(VistaのWPFアプリ)
やCOMでの処理が面倒な時に有効です
DATE:2007/7/31(Tue) 23:17


RE:CLKITEMが動作しない事について ショウ

umiumi様
 ご丁寧な解説ありがとうございました。
これからのプログラミングの状況でACC指定を色々と使い分けて行く上での考え方がよくわかりました。
 日々精進してまいりたいと思います。
DATE:2007/8/1(Wed) 08:41 MAIL


XLGETDATA関数でデータを受け取る際の配列について ショウ
 1)では、「Excelデータ」2次元配列へうまくデータの受け取りができるのですが、

 2)のように「Excelデータ」をあらかじめ、変数宣言を行ってしまうと、とたんにデータの受け取りが失敗してしまいます。

 全ての変数を宣言してから使おうと考えていましたので困ってしまいました。どうかご指南お願い致します。

1)
ExcelID = GETID("Excel")
ComExcel = XLOPEN()
Excelデータ = XLGETDATA( ComExcel, "E2:G1000")

2)
OPTION EXPLICIT
OPTION OPTPUBLIC

PUBLIC DIM ComExcel
PUBLIC DIM ExcelID
PUBLIC DIM Excelデータ[1000][3]

ExcelID = GETID("Excel")
ComExcel = XLOPEN()
Excelデータ = XLGETDATA( ComExcel, "E2:G1000")
DATE:2007/7/31(Tue) 19:43 No.985 MAIL


RE:XLGETDATA関数でデータを受け取る際の配列について umiumi

DIM ComExcel
DIM Excelデータ
ComExcel = XLOPEN()
Excelデータ = XLGETDATA( ComExcel, "E2:G1000")

PUBLIC宣言では Excelの配列型に対応していません。(対応します)
ローカル宣言(DIM)で対処して下さい([1000][3]は要りません)
DATE:2007/7/31(Tue) 22:52


RE:XLGETDATA関数でデータを受け取る際の配列について ショウ

 ご返信ありがとうございました。
PUBLIC宣言では Excelの配列型に対応されるのを期待しまして、
とりあえず、ローカル宣言で対処していきたいと思います。
DATE:2007/8/1(Wed) 08:43 MAIL


暗号化 キキ
作成していたスクリプトを間違って暗号化してしまい、スクリプトの変更が出来なくなってしまいました。

どうにかして元に戻すことは出来ないでしょうか?
DATE:2007/8/2(Thu) 20:26 No.987


RE:暗号化 miles

出来ないようです。
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=380&log=ON&cnt=4
DATE:2007/8/2(Thu) 22:55


STOPボタン 平凡
Uws2ExeでEXE化したアプリケーションの「STOP」ボタンを押したいのですがどうすればいいでしょうか?。

clkitem(getid("test"),"STOP") //testはEXE化したアプリケーションの名前です
これではストップボタンはおせませんでした。

どなたか教えていただけないでしょうか。
過去のログを見ましたがわかりませんでした。
よろしくお願いします。
DATE:2007/8/3(Fri) 20:34 No.989


RE:STOPボタン 眠たい詩人

・OSとUWSCバージョン、アプリの種類とバージョンを書きましょう。
・getid()関数の戻り値が正しいかを確認しましょう。print文 or msgbox()関数。
・「STOP」ボタンを表示しているアプリケーションまたは表示方法により、取り組みは異なります。
 UWSC FAQ http://www.uwsc.info/faq.html CLKITEM関数で押せないボタンがある
・clkitem()関数の『アイテム種別』はすべて試しましたか。CLK_ACCなど。
 clkitem()関数の使用事例は、過去ログやヘルプにたくさんあります。
DATE:2007/8/4(Sat) 23:02


STOPボタン 平凡

どうもすいませんでした。
OSはVISTAです。
UWSCのバージョンはUWSC Ver4.3b Pro版です。
Rec IEで記録したスプリクトをEXE化したアプリケーションです。
DATE:2007/8/4(Sat) 23:20


RE:STOPボタン うっちー

UWSCの停止フォームのSTOPボタンは
CLKITEMでは押せないみたいなので
BTNを使う方法です。

id = getid("test", "TFTeisi.UnicodeClass")
x = status(id, ST_CLX) + (status(id, ST_CLWIDTH) / 2)
y = status(id, ST_CLY) + (status(id, ST_CLHEIGHT) / 2)
btn(LEFT, CLICK, x, y)
DATE:2007/8/4(Sat) 23:44


RE:STOPボタン 平凡

眠たい詩人さん、うっちーさんありがとうございました。
STOPボタンを押せることができました。
ただいま勉強中です、。(*^_^*)
また、超初心者のような質問をするとは思いますがよろしくお願いします。
DATE:2007/8/5(Sun) 00:48


素人の疑問その1 
お世話になります
HELPにある下記のスクリプトですが 
◎エクセルを開かずにデータを変更するって無理でしょうか?
// Excel操作
// 指定Excelファイルを読み、Sheet2のB2セルの値を変更して書き戻して終了
Excel = XLOPEN("C:\TEMP\TEST.xls")
XLACTIVATE(Excel, "Sheet2")
dd = XLGETDATA(Excel, "A1:C3")
print "A1="+dd[1,1]
print "B2="+dd[2,2]
print "C3="+dd[3,3]
dd[2,2] = "変更"
XLSETDATA(Excel, dd, "A1")
XLCLOSE(Excel)
DATE:2007/8/2(Thu) 17:12 No.986


RE:素人の疑問その1 とも

エクセルを開かずに = エクセルを表示せずに
の意図なら、

Excel COM を使えば簡単に出来ます。

UWSC Pro版で提供されている XL系の関数を使っている限りは厳しいと思います。
過去ログから、「EXCEL COM visible」辺りで検索すると望む動作のヒントが多数出てくると思いますよ
DATE:2007/8/2(Thu) 19:29


RE:素人の疑問その1 

ともさん
遅くなり失礼しました
やってみます
DATE:2007/8/5(Sun) 08:29


スレッドの引数について 泣き虫マウス
久しぶりにお邪魔します。
uwsをとても有益に使わせていただいています。
------------------------------------------------------
flag=0

code = 33

ifb flag=0 then
Thread ppp(code)
else
ppp(code)
endif

sleep(2);
fukidasi("code:"+code,100,100);sleep(3);

Procedure ppp(var code)
fukidasi("ppp-code:"+code,100,120);sleep(1);
code = 44
Fend
------------------------------------------------------
以上が今回のスクリプトですが,
flag=1 の時は当然 メインの噴出しでは44の表示です。
が、flag=0の時はメインの吹き出しでは33の表示です。
これは、間違い?それとも仕様でしょうか?

codeをpublicにしてpppの引数を無しにすれば44の結果は関数ppp()を
threadで起動した時も、得られるのですけれど??
public変数を使うのがすこぶる嫌いな私としては、ムムムム。。。
DATE:2007/8/5(Sun) 00:26 No.992


RE:スレッドの引数について とも

FYI
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=272&log=ON&cnt=3

仕様ですね               
DATE:2007/8/5(Sun) 01:58


RE:スレッドの引数について 泣き虫マウス

ともさん、ありがとうございました。
DATE:2007/8/5(Sun) 13:50


まだダウンロードしていないのですが いぶいぶ
1つ質問なのですが、フリードフトのほうは無料なのでしょうか?
DATE:2007/8/5(Sun) 18:06 No.994


RE:まだダウンロードしていないのですが たろう

>フリードフト
フリーソフトですね。無料です。
DATE:2007/8/5(Sun) 22:32


[次のページ]

 親記事合計:120件


 掲示板検索ツール  UBTrek


Rental:大宇宙 お知らせ(12/10) Base:ACE