トップページ > 記事閲覧
DX.WaitTimerについて
名前:ボクシ 日時: 2020/01/28 11:19

DX.WaitTimerについて、質問があるのですが、 純粋に下記を実行し、CPU使用率を測定し続けてみたところ、 @WaitTimerを使用した場合のみCPU使用率が明らかに高く、 ASystem.Threading.Thread.Sleepを使用した場合には、CPU使用率が下がります。 この差がわかりませんが、WaitTimerでは、何をされてているのでしょうか? @ while(true){ DX.WaitTimer(1); } A while(true){ System.Threading.Thread.Sleep(1); }
メンテ

Page: 1 |

Re: DX.WaitTimerについて ( No.1 )
名前:yumetodo 日時:2020/01/28 14:53

WaitTimerはキーボード等各種状態更新を行っていたような・・・?
メンテ
Re: DX.WaitTimerについて ( No.2 )
名前:管理人 日時:2020/01/28 23:55

System.Threading.Thread.Sleep はスリープ( CPUを動作させないで指定時間経過するのを待つ )ですが、 WaitTimer は以下のような動作をしているため、指定された時間が 4msec 未満の場合は全くスリープしません int WaitTimer( int WaitTime ) { if( WaitTime > 4 ) { while( 残り時間が4msec以上だったらループ ) { if( ProcessMessage() != 0 ) { return 0; } Sleep( 1 ); // 1msecスリープする } } while( 残り時間が0msecではなかったらループ ) { } return 0; } 現在のOSでは、例えば 15msec ぴったり処理を止めたい、と思ったときは System.Threading.Thread.Sleep(15); とすれば正確に 15msec ぴったり処理を止めることができるかもしれませんが、 以前は精度が甘く、Sleep(15);としても実際には16msec経過してしまったり、逆に 14msecしか経過せずに関数から出てきてしまったりしていたので、より正確に待つ ために上記のような実装になっています
メンテ
Re: DX.WaitTimerについて ( No.3 )
名前:ボクシ(解決) 日時:2020/01/29 16:18

管理人様 ご返答頂き有難うございました。 4ms以下では動作していないという事で、納得しました。
メンテ
Re: DX.WaitTimerについて ( No.4 )
名前:管理人 日時:2020/01/29 23:22

いえ、4ms以下でも動作( WaitTime で指定した時間、関数から出てこない、という動作 )はしています ただ、Sleep と異なり CPU は休んでいませんので、CPU使用率を下げる効果はありません
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存