APIでSLEEPするには?

解決


いて座  2003-11-21 18:02:54  No: 110124  IP: [192.*.*.*]

こんにちは。

1分間Sleepしたい場合、Sleep 60000とDoeventsを1回行うのと、Sleep 500とDoeventsをセットで120回繰返すのとではどちらが効率が良いのでしょうか?
普通に考えると、オーバヘッドの無い前者の方が良い様に思っていたのですが、実際に試して見ると、前者の場合だと、他のアプリケーション(例えばエクセル等)の起動がとても遅くなり、後者の場合では遅延は感じられなかったです。

遅延が感じられないと言う事で後者を選択すべきと判断しても良いものなのでしょうか?
意見を聞かせてください。

ちなみに、Win XP、VB6です。

編集 削除
ぃゃん!  2003-11-21 19:33:59  No: 110125  IP: [192.*.*.*]

Sleep 中に DoEventなんてする必要ないと思いますが・・・

編集 削除
よねKEN  2003-11-25 15:14:21  No: 110126  IP: [192.*.*.*]

Sleep 100ぐらいでDoEventsとセットで600回に一票。

> 前者の場合だと、他のアプリケーション(例えばエクセル等)の起動がとても遅くなり

これはSleepが原因なんですか?

私が後者を推す理由は、長時間のSleepはフリーズしているのと
変わらないので、Windowsアプリとしてそれはまずいと思うからです。

100msというのは適当な数字ですが、500msだと自分のアプリを
ユーザが操作したとき、かくんかくんした動きをすると思われるので、
もっと短く設定しています。

編集 削除
K  2003-11-25 20:23:06  No: 110127  IP: [192.*.*.*]

意図とは違うかもしれませんが、Timerじゃだめなんでしょうか?

編集 削除
特攻隊長まるるう  2003-11-26 00:54:48  No: 110128  IP: [192.*.*.*]

いや、Sleep の効率の話だからね。Sleep がどういう関数か
どんな動きをするかが問題で Timer がどうとかじゃないと
思うよ。エクセルの起動なんて何もしなくても重くなるし(爆)、
2回目の起動からメモリにスタックされてて早くなるだけかもしれないし、
Sleep 60000とDoeventsとか言ってたらSleep 60000が終了する
まで自分が制御を握ってるのかもしれないし、どこで何が他のアプリ
立ち上げてるか書かれてないし…。
…ボク自身がそんな事を論じるほどの実力じゃないしw

編集 削除
いちゆ  2003-11-26 10:33:36  No: 110129  IP: [192.*.*.*]

個人的には、sleep 5:doventsくらいでループさせてる。

編集 削除
いて座  2003-11-26 13:25:18  No: 110130  IP: [192.*.*.*]

皆さん、貴重な意見をどうも有難うございました。
短時間なSleepをLoopさせる方向で進めたいと思います。

ぃゃん!さん、他のサイトでSleep時にはDoeventsをとの記事を見た記憶があったので、ついセットだと考えていました。不要な場面もあるのですね。参考になりました。

よねKENさん、
>> 前者の場合だと、他のアプリケーション(例えばエクセル等)の起動がとても遅くなり
>これはSleepが原因なんですか?
何度試しても、前者の場合は起動が遅いのでSleepが原因と考えています。
ちなみに、Sleepしておいて手動でEXCELファイルをクリックしています。
また、
>私が後者を推す理由は、長時間のSleepはフリーズしているのと
>変わらないので、Windowsアプリとしてそれはまずいと思うからです。
ご尤もな意見で、本当にその通りでした。有難うございます。

Kさん、ごめんなさい。今回は、特攻隊長まるるうさんの仰るとおりSleepの話をしたかったので...

いちゆさん、具体的な数値を有難うございます。よねKENさんと合せて短時間のLoopが2票獲得しましたので決心できました。

ここに投函する前までは、短時間のSleepをLoopするのは制御の切替オーバヘッドが発生する(と思い込んでいる)のでCPU能力が勿体無いと、ケチな考えを持っていたのですが、皆さんのお陰で考えが変わりました。
本当に有難うございました。

編集 削除