
現在、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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- 冷蔵庫・炊飯器 炊飯器のタイマー 7 2022/12/15 21:05
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- その他(プログラミング・Web制作) uwscのCHKING関数の画像の認識がうまくいかない。 1 2022/06/18 20:55
- その他(ネットショッピング・通販・ECサイト) 初期不良の対応について 5 2023/07/21 19:46
- その他(悩み相談・人生相談) 失敗に落ち込んでいます 10 2023/01/01 20:18
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
このQ&Aを見た人はこんなQ&Aも見ています
-
UWSCの終了の仕方
その他(プログラミング・Web制作)
-
UWSCのスクリプトにラグが発生します。
その他(プログラミング・Web制作)
-
UWSC 非アクティブウィンドウへのキー入力
その他(ソフトウェア)
-
-
4
UWSCに制限時間を付けたいです
その他(プログラミング・Web制作)
-
5
UWSCの待機コマンドについて
その他(ソフトウェア)
-
6
UWSCのスクリプトで行き詰っています。。
その他(プログラミング・Web制作)
-
7
UWSCで、スクリプトの実行時間を一定にするには
その他(プログラミング・Web制作)
-
8
UWSCのプログラムについて。キーを押し続けているあいだ待機状態にしたい
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private subモジュールを他のモ...
-
【C#/Java?】try-catchでcatch...
-
VBAの進捗状況をリアルタイ...
-
シグナル 6(SIGABRT)とは?
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
C#でタイトルバーを自動的に隠...
-
“try/catch”と“if/else”
-
VB.NET SPRED(チェックボック...
-
マクロで、次のコードへ行く前...
-
VBAでBook読み込み時の非表示方...
-
エクセル VBAで複数セル選択時...
-
条件文でelseはつけるべき?
-
特定のファイルを他のプロセス...
-
jspのiterateのindexidについて
-
IF文に時間(何時から何時ま...
-
LoadPicture のオートメーショ...
-
Word VBA。各マクロの間に待ち...
-
順番に処理させたい
-
プログラムのコードの書き方に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
ExcelのVBAで、選択したファイ...
-
【C#】Page_Loadさせない方法に...
-
StatusStripの表示が更新されな...
-
途中で処理を中断させたい (ア...
-
エクセル VBAで複数セル選択時...
-
Functionで戻り値を複数返す方法
-
VBAでBook読み込み時の非表示方...
-
VBA 複数の行を高速で削除する...
おすすめ情報