現在、5秒ごとに3箇所をクリックという動作を10分間繰り返すというなスクリプトを組んでいます。
その際に同時進行で残り時間をFUKIDASIで表示させています。
THREADを使うのは今回が初めてなのですが、とりあえず動作はしてくれています。
しかしタイマー部分単体で動かす場合は問題ないのですが、並列処理にするとタイマーにズレが生じてしまいます。
具体的には下記のようなコードで動かすと、残り時間が10秒などの時点でタイマーが終了してしまいます。
BTN部分のクリック待機時間を考えても計算が合いません。
これは何かTHREADの使い方として間違っているのか見落としがあるのでしょうか?
表示位置をずらしただけの同じ秒数のタイマーをTHREADを使うもの、使わないものとで同時にカウントダウンさせた場合はズレもなく、2つとも0秒の時点で終了するので混乱しています。
実際に使用している時は、タイマーが0になる前に次の処理に行くことがわかっているので問題ないと言えば問題ないのですが、原因がわからず気持ち悪いです。
原因や対策がわかる方いらっしゃいましたらよろしくお願いします。
THREAD countdown()
FOR a = 1 to 40 //1セット15秒なので40回で10分
BTN(LEFT,CLICK,50,50,10)
SLEEP(5)
BTN(LEFT,CLICK,250,250,10)
SLEEP(5)
BTN(LEFT,CLICK,500,500,10)
SLEEP(5)
NEXT
PROCEDURE countdown()
FOR b = 600 to 0 step -1
FUKIDASI("残り" + b + "秒",1000,1000)
SLEEP(1.0)
NEXT
FUKIDASI()
SLEEP(0.1)
FEND
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> 現在、5秒ごとに3箇所をクリックという動作を10分間繰り返す
動作を40回繰り返すでなくて、所定の時間処理を行う場合、ForとSleepを組み合わせても、正確な時間で処理するのは難しいです。
短い時間で処理終了するってのは別の原因ですが、例えばBtn処理自体、For~Next処理自体の実行時間とかもあるハズですし。
GetTime()で現在時刻を取得し、現在時刻に対して処理するのが良いです。
--
Public time_end // 終了(予定)時刻
time_end = GetTime() + 10*60 // 終了時刻は現在時刻から10分後
THREAD countdown()
While GetTime() < time_end // 現在時刻<終了時刻の間処理
// 従来の処理
Btn(~
Sleep(~
~
Wend
endend
// スレッド
PROCEDURE countdown()
while GetTime() < time_end // 現在時刻<終了時刻の間処理
Fukidasi("残り" + (time_end-GetTime()) + "秒", ~)
Sleep(0.5)
Wnnd
Fukidasi()
FEND
回答ありがとうございます。
やはりこの書き方だと正確さに欠けるんですね。
GetTimeでのやり方は次の手として考えていたので、わざわざコードまで書いて下さり、大変助かりました。
早速この方法でやってみた所、問題なく動きました。
>短い時間で処理終了するってのは別の原因
これはどういった原因が考えられますか?
SLEEP以外の処理で時間がかかるのはわかるのですが、その場合はタイマー部分よりも処理時間が長くなるはずなので、逆にタイマーが0になってもすぐに次の処理に行かないのであれば納得できるのですが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
UWSCの待機コマンドについて
その他(ソフトウェア)
-
UWSCのSELECT文の記述方法
その他(プログラミング・Web制作)
-
UWSC
フリーソフト
-
-
4
UWSCでループ処理がうまくいきません
その他(プログラミング・Web制作)
-
5
UWSCのプログラミングついて教えてください。
その他(プログラミング・Web制作)
-
6
UWSCの色判定
その他(プログラミング・Web制作)
-
7
UWSCのスクリプトにラグが発生します。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の名前のオートシェイプの...
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
vbaのエラー対応(実行時エラー...
-
Excel VBA セルの名前があるか...
-
Functionで戻り値を複数返す方法
-
VBAでBook読み込み時の非表示方...
-
IF文に時間(何時から何時ま...
-
ListViewから選択中の文字列を取得
-
StatusStripの表示が更新されな...
-
どうやってもFor文を抜けてしま...
-
複数個のTextBoxでいずれかの内...
-
VBA For Each 〜 複数条件について
-
VBA フォルダ内の全てブックの...
-
Access プログレスバー 画面...
-
特定のファイルを他のプロセス...
-
エクセル VBAで複数セル選択時...
-
VBAで組み合わせソフトを作ろう...
-
EXCELマクロ実行中に
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
どう増強すべきか
-
Excelプロセスが消えない
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
特定のファイルを他のプロセス...
-
エクセル VBAで複数セル選択時...
-
Excel VBA セルの名前があるか...
-
順番に処理させたい
-
ExcelのVBAで、選択したファイ...
-
VB6にてネットワーク上にある共...
-
【C#】Page_Loadさせない方法に...
-
Word VBA。各マクロの間に待ち...
-
ListViewから選択中の文字列を取得
-
【Vb.net】プリンタジョブの取得
-
VBA 複数の行を高速で削除する...
おすすめ情報