トップページ > 過去ログ > 記事閲覧
公開されない関数について
名前:重蔵 日時: 2007/07/27 23:46

よく掲示板等に書かれているソースを見るのですが… 「Sleep」という関数はどういう意味でしょうか? ご教授お願い致します。 なかなか過去ログ等を参照しても、関数の説明等が見つかりませんでしたので…  既出スレッドになったかもしれません。 その際は申し訳ございません… またこの関数も含めてですが、公開していない関数が多くあるようですね。 SetWindowLongやSetWindowPosなどもそうですが… これは自己責任という意味で公開を行わないのでしょうか? 是非リファレンスに入れて頂きたいのですが…

Page: 1 |

Re: 公開されない関数について ( No.1 )
名前:SweetBlack 日時:2007/07/28 01:42

それらの関数はDXライブラリの関数じゃなくて WinAPI等、他のものの関数だったりします。 よって、ここを探しても見つかりません。 他のサイトを探せばいくらでも見つかると思います。 Sleepについて私が知ってる程度(実は私も最近知ったばかり)で 簡単に説明しますと、指定ミリ秒だけ処理が停止する関数です。 実行しているプログラムはSleepによって止まりますが それ以外のプログラムは止まりません。 つまりその間、CPU使用を他のプログラムに渡すわけです。 具体的には、 for(....) { <色々な処理> } というプログラムを実行すると、実行中は CPU使用率を独占してしまいますが、 for(....) { Sleep(10) ; <色々な処理> } とかやる事で、CPU使用率を下げたりします。 当然、Sleepの使用によって、実行プログラムの 処理スピードは落ちますので、 どの程度Sleepを使うかはプログラム次第という事になると思います。
Re: 公開されない関数について ( No.2 )
名前:重蔵 日時:2007/07/28 02:19

SweetBlackさん、ご返信ありがとうございます! API関数でしたか、それは失礼致しました; もっとリサーチしておくべきでしたね。。。 ところでSleepに関してですが、それですとWaitTimerとは違いはほとんど無いという事でしょうか? 自分は今のところ、FPSを設定し、その時間に関して条件文をかけてゲーム処理を行い、時間外にWaitTimerをかけています。 WaitTimerの場合は、停止中にProcessMessageを行っていますね。 DXライブラリを使っている場合、効率性や安定性などでどちらが優れるという事はあるのでしょうか?
Re: 公開されない関数について ( No.3 )
名前:優柔不断 日時:2007/07/29 19:04

たぶんWaitTimer()のほうがいいと思いますよ。実験してみましたが、Sleep()のほうは止まっている途中に ×ボタンのクリックに反応せずに、異常終了する場合がありました。WaitTimer()はそれが全くなく、CPU使用率も そんなに差はありませんでした。なので、WaitTimer()のほうがいいと思います。
Re: 公開されない関数について ( No.4 )
名前:重蔵 日時:2007/07/30 13:24

優柔不断さんご返事ありがとう御座います^^ 私も実験を行い、優柔不断さんのようなケースがありました。 そこでなぜ途中でプログラムが止まったのか気になり、Sleepに割り振った引数の値を一周期ごとに調べてみたところ、 極たまに負数を渡してしまう場合が発生していました。 変数管理の問題が多かったので、それを解決した所、意外とSleepの方が使えるなと実感しました。理由は、 @CPU使用効率が更に良くなった。(たとえばWaitTimer使用で3〜5%の使用率に抑えていたシーンが1〜2%へ改善) AWaitTimer()を使っている時にヘッドホンを付けてみると、何か微小ノイズのようなデバイス音がする。  Sleepだとそれがない。(デバイスに依存すると思いますが、注意深く聞いてみれば分かると思います)  常に!ProcessMessage()等を実行しているからだとか、もしかしたら測った時のシステム処理の重さ具合の差が現れたか?というような事情と思います。 逆に言えばそれだけの変化です。 DXライブラリ使用中は!ProcessMessage()等を一定周期で回すべきという御触れもありますし、 安定性を考えるとSleepがいい!とも断定できませんね^^;

Page: 1 |